2010-02-25 1 views
2

У меня создалось впечатление, что если приложение имеет открытый дескриптор, и он выходит из строя, дескриптор не освобождается, и если вы попытаетесь получить доступ к этому дескриптору (скажем, файла), вы получите ошибка.Что происходит с открытыми дескрипторами при сбое приложения? (Windows XP и далее)

Тем не менее, я пробовал это в Windows XP и, кажется, его отпустили, если я закрою exe из диспетчера задач, прежде чем он закрыл дескриптор. Ниже приводится код:

Private Sub Form_Load() 
    Dim iFile As Integer 
    iFile = FreeFile   
    Open "myfilelock" For Output Lock Read Write As #iFile 
    MsgBox "About to close" 'close it here with task manager 

    Close #iFile 

End Sub 

Таким образом, делает Windows XP и далее выпускать все открытые дескрипторы в случае ех, имеющий эти ручки аварию?

ответ

4

Все версии закрытия ядра Windows обрабатываются при сбое приложения. Даже Windows 95 сделала это. И, конечно же, все, что основано на ядре Windows NT или позже, закроет дескрипторы ядра при сбое приложения.

Это включает в себя ручку на файлы, событие, семафоры, разделяемая память, трубу и розетки

+1

+1. Хотя, были версии Windows до Windows 95, которые вы знаете :) Это было неверно в 16-битной Windows, но я думаю, что это древняя история сейчас ... может быть, http://blogs.msdn.com/oldnewthing/archive/ 2004/03/01/82103.aspx – MarkJ

1

Все современные ОС очистить все ресурсы программы, когда программа завершает работу или сбой - память, ручки, розетки, нитка и т.д. В противном случае вы получите массивные утечки ресурсов из каждого дескриптора, которые разработчик приложений забыли закрыть при выходе, и придется периодически перезагружать компьютер ...

+1

Я нахожу, что мне приходится периодически перезагружать Windows :) –

Смежные вопросы