質問

シャットダウン中に問題を抱えているプログラムがあり、そのソースに戻ることができない例外を提起しています。タイミング関連で非決定的であるように見えます。これは、すべての共有リソースがリリースされた後に発生します。シャットダウンして以来、メモリリークは問題ではないため、共有リソースの代わりにリソースをリリースした後、すぐに黙って終了するようにプログラムを伝える方法があるのではないかと思います。シャットダウンシーケンスを継続し、例外メッセージボックスを提供します。

誰かがそれをする方法を知っていますか?

役に立ちましたか?

解決

Delphi Run Time LibraryソースコードとMicrosoftのドキュメントを見た後。メイソンとポール・ジャンのコメントを裏付けることができます。

シャットダウンの階層は次のとおりです

  Application.Terminate()
    performs some unidentified housekeeping of application
    calls Halt()

  Halt()
    calls ExitProc if set
    alerts the user in case of runtime error
    get rid of PackageLoad call contexts that might be pending
    finalize all units
    clear all exception handlers
    call ExitprocessProc if set
    and finally, call ExitProcess() from 'kernel32.dll'

  ExitProcess() 
    unloads all DLLs
    uses TerminateProcess() to kill the process

他のヒント

ExitProcess(0)?

HALT(0)は、かつてはプログラムに即時の効果で終了するように伝える古き良き時代の方法でした。おそらくそれを行うためのよりデルフィに優しい方法がおそらくありますが、私は95%がまだ機能していると確信しています(0)。 :-)

exitProcess()を使用するというHeartWareの提案が失敗した場合、DLL_Process_Detachによく応答しないDLLを使用している可能性があります。その場合、TerminateProcess(getCurrentProcess、0)を使用してみてください。

そのような措置に頼ると、トピックタイトルの「きれいな」部分がまだ精査されているのではないかと思うかもしれません。

このような問題を狩らなければならなかったのは、シャットダウンがイベントを引き起こすことでした(サイズを変更しますか?しばらく経ちましたか?)死にかけている窓で発砲し、すでに処分されていたものを必要としていたものを再描画しようとしました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top