2016-07-22 7 views
0

タスクマネージャから「終了タスク」によってアプリケーションのデータが失われるのを防ぐため、WM_CLOSEイベントの関数ハンドラにデータを保存しようとしています。タスクマネージャを使用してアプリケーションを強制終了したときにデータを保存するにはどうすればいいですか?

アプリは、Alt + F4または「閉じる」ボタンを使用してアプリを終了した場合に備えて、データを正常に保存します。しかし、私はタスクマネージャーを介してそれを殺したとき、保存データの処理を正しく行うことができませんでした。貯蓄の進捗は途中で終了したようです。

私はVS2015 IDEでデバッグしようとしましたが、デバッガはWM_CLOSEハンドラのブレークポイントを正常に傍受しましたが、F10でステップオーバーするとアプリケーションがすぐに終了しました。

私のアプリケーションがデータを完全に保存するまで、終了の進行を遅らせる方法はありますか?

私は以下の2つのリンクを見つけましたが、助けにはなりませんでした。

How to handle "End Task" from Windows Task Manager on a background process?

How does task manager kill my program?

+0

アプリケーションをデバッグしたとき、タスクマネージャは応答していないと判断し、それを強制終了しました。ログファイルを作成しようとしましたか?保存プロセスはどのくらいの期間かかりますか? – Dutow

+0

@Dutwo通常は500ms以下です。私はファイルへのログを試みましたが、ログに記録されることはありません。 –

+0

タスクマネージャでアプリケーションを終了したいのであれば、なぜ何かを保存したいのですか?私が望むのは、すぐに終了するプロセスだけです。ユーザーフレンドリー。 –

答えて

1

タスクマネージャは、アプリケーションが応答しないことを決定し、それを終了することがあります。あなたはそれに対して何もすることはできません。

データが常に保存されるようにするには、バックグラウンドで一定の時間(少なくとも1分に1回、好ましくは数秒で変化が起きないようなヒューリスティックを使用)を保存する必要があります。それはより複雑ですが、たとえ停電の場合など、WM_CLOSEをまったく受け取らなくても作業するという利点があります。

+0

私は、アプリケーションがタスクマネージャーによって殺されたときにWM_CLOSEイベントが常に傍受されると確信しています。上記の問題は、終了が早すぎて保存操作を完了できないことです。私はある一定の期間に救済することができますが、データの変更が頻繁に行われるため、不要な救済が多すぎるとパフォーマンスに影響が出ます。 –

+0

はい、終了に対して何もすることはできません。通知を受け取ることはできず、遅延もできません。システムがあなたのアプリを終了させると決定すると、すぐに終了します。 – Dutow

関連する問題