Что происходит с открытыми дескрипторами при сбое приложения?(Windows XP и выше) - PullRequest
2 голосов
/ 25 февраля 2010

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

Тем не менее, я пробовал это в 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 и далее выпускает все открытые дескрипторы в случае сбоя исполняемого файла с этими дескрипторами?

Ответы [ 2 ]

4 голосов
/ 25 февраля 2010

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

Сюда входят дескрипторы файлов, событий, семафоров, разделяемой памяти, каналов и сокетов

1 голос
/ 25 февраля 2010

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

...