2

プロセスが終了する時間をキャッチしようとしています(たとえば、タスクマネージャーでプロセスを強制終了することにより)。(終了したプロセス内で)検出したとき、何らかの作業を行うために終了する前に。私のアプリケーションは、itslef によって終了しません (エンドレス ループ)

私が試した:1)atexit 2)SetUnhandledExceptionFilter

実行中のアプリケーションを単純に閉じるためにデバッグ実行を試みましたが、最終的に余分なタスクを実行するまでには至りませんでした。

ヘルプ、

4

3 に答える 3

4

これはあなたの質問に答えるはずです:

タスク マネージャーでアプリケーションを強制終了するには、2 つの方法があります。

[アプリケーション] タブで強制終了することは、SIGTERM (Linux の場合) とほぼ同じです。基本的に「ウィンドウを閉じる」メッセージを送信しているため、アプリケーションはそれを傍受してさらに処理を行う可能性があります。キャッチするメッセージは WM_CLOSE です。

[プロセス] タブで強制終了することは、SIGKILL (Linux の場合) とほぼ同じです。タスクマネージャーのリストボックスとプロセスの終了ボタンでユーザーのアクションを監視するか、最初のアクションがいつ強制終了されたかを確認するウォッチドッグプロセスを用意する以外に、それを傍受するためにできることは何もありません

于 2011-11-03T11:56:14.867 に答える
1

コンソールアプリでは、CTRL_C_EVENT、CTRL_BREAK_EVENT、CTRL_CLOSE_EVENT、CTRL_LOGOFF_EVENT、CTRL_SHUTDOWN_EVENTをキャッチするためにHandlerRoutineコールバック関数をインストールすることを検討する必要があります。

GUIアプリでは、 WM_CLOSEWM_QUERYENDSESSIONWM_ENDSESSIONの処理を検討する必要があります。

于 2011-11-03T13:10:45.490 に答える
1

実行中のすべてのプロセスを列挙します。これを行うと、プロセス ID が取得されます。以前に取得した ID から各プロセスへのハンドルを取得し、探しているプロセスを見つけます。次のように、別のスレッドで同じプロセス ハンドルを使用します。

WaitForSingleObject( hProcess, INFINITE );

プロセスが終了すると、このスレッドは終了します。

于 2011-11-03T12:17:23.253 に答える