2010-02-25 51 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是否会释放所有打开的句柄,以防这些句柄的exe崩溃?

回答

4

当应用程序崩溃时,所有版本的Windows关闭内核都会处理。即使Windows 95做到了这一点。当然,基于Windows NT内核或更高版本的任何内容都会在应用程序崩溃时关闭内核句柄。

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

+1

+1。虽然在Windows 95之前有Windows的版本,但你知道这在16位Windows中并不是这样,但我猜这是现在的古代历史......也许http://blogs.msdn.com/oldnewthing/archive/ 2004/03/01/82103.aspx – MarkJ

1

所有现代操作系统的清理所有项目资源时,程序退出或崩溃 - 存储,处理,插座,线等。否则,您会从每个应用程序开发人员在退出时忘记关闭的句柄获得大量资源泄漏,并且必须定期重新启动您的计算机...

+1

我发现我必须定期重新启动Windows无论如何:) –

相关问题