2

我的印象是,如果应用程序有一个打开的句柄并且它崩溃了,则不会释放该句柄,如果您尝试访问该句柄(比如说文件),那么您会收到错误消息。

但是,我已经在 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

那么,如果具有这些句柄的 exe 崩溃,Windows XP 是否会释放所有打开的句柄?

4

2 回答 2

4

当应用程序崩溃时,所有版本的 Windows 都会关闭内核句柄。甚至 Windows 95 也这样做了。当然,任何基于 Windows NT 内核或更高版本的程序都会在应用程序崩溃时关闭内核句柄。

这包括文件、事件、信号量、共享内存、管道和套接字的句柄

于 2010-02-25T09:37:03.610 回答
1

当程序退出或崩溃时,所有现代操作系统都会清理所有程序资源——内存、句柄、套接字、线程等。否则,您会从应用程序开发人员在退出时忘记关闭的每个句柄中获得大量资源泄漏,并且必须定期进行重启你的电脑...

于 2010-02-25T09:44:06.700 回答