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

では、Windows XP以降では、開いているハンドルを持つexeがクラッシュした場合に備えて、開いているハンドルをすべて解放しますか?

4

2 に答える 2

4

Windowsのすべてのバージョンは、アプリケーションがクラッシュしたときにカーネルハンドルを閉じます。Windows95でさえこれを行いました。そして確かに、Windows NTカーネル以降に基づくものはすべて、アプリのクラッシュ時にカーネルハンドルを閉じます。

これには、ファイル、イベント、セマフォ、共有メモリ、パイプ、ソケットへのハンドルが含まれます

于 2010-02-25T09:37:03.610 に答える
1

最新のすべての OS は、プログラムが終了またはクラッシュすると、すべてのプログラム リソース (メモリ、ハンドル、ソケット、スレッドなど) をクリーンアップします。そうしないと、アプリ開発者が終了時に閉じるのを忘れて、定期的に閉じる必要がある各ハンドルから大量のリソース リークが発生します。コンピューターを再起動します...

于 2010-02-25T09:44:06.700 に答える