基本的に一連の複雑な計算を行うシングルダイアログアプリケーションを作成しました。アプリケーションは最初にWin32コンソールアプリケーションとして作成され、その後、プログレスバーを追加することに決めた後、コンソールアプリケーションをシングルダイアログベースのアプリケーションに変換しました。ダイアログにはプログレスバーがあります。ダイアログのOnInitDialog()関数で、私は計算を開始します。計算はワーカースレッド上で実行されています。このスレッドは、_beginthreadex関数を呼び出すことによって作成されます。プログレスバーは、PostMessageを使用してダイアログにメッセージを投稿することによってスレッドによって更新されます。スレッドの実行が完了したら、CDialog :: OnOK()関数を呼び出してダイアログを閉じます。問題は、ダイアログが閉じられた後でも、アプリケーションがすぐに終了しないということです。ダイアログが閉じていても、アプリケーションを閉じるのに2秒近くかかります。 この問題を解決するためのお手伝いをしております。おかげさまで MFCスレッディング問題 - すべてのスレッドが完了した後にプログラムが終了しない
0
A
答えて
0
ワーカースレッドがまだ実行中であるためです。すべてのスレッドが実行を終了するまで、アプリケーションは終了しません。あなたのUIスレッドはワーカースレッドの前に閉じているので、ウィンドウは隠されているかもしれませんが、ワーカースレッドが作業を完了するまでプロセスは終了しません。
0
ワーカースレッドがまだ実行されている可能性があります。スレッドが停止していることを確認するには、イベントを使用して信号を送ります。ユーザーがダイアログの閉じるボタンを押したときにスレッドを強制終了するイベントを通知することができます。
あなたの複雑な計算の中でイベントが通知されているかどうか(ループかもしれない)を確認して、それから壊れているかどうかを確認できます。したがって、問題なくスレッドを停止します。
while(true)
{
//Some complex task
DWORD dwWaitResult;
dwWaitResult = WaitForSingleObject(hwndShutdownEvent,0);
if (WAIT_OBJECT_0 == dwWaitResult)
{
break;
}
}
+0
いいえ、これは当てはまりません。すべてのワーカースレッドは終了です。問題はメモリリークです。とにかくあなたの時間のおかげで – Ram
関連する問題
- 1. C#プログラムが終了した後にコンソールが終了しない
- 2. MessageBoxが終了した後の終了プログラム
- 3. すべてのスレッドが終了した後にC#プロセスが残っている
- 4. プログラムの終了時にプロセスが終了しない
- 5. EJBシングルトンは - スレッドが終了した後、「トランザクションがアクティブでない」
- 6. ASyncタスクが終了した後にアンドロイドサービスを終了する方法完了しましたか?
- 7. スレッドが完了したイベントと完了したイベント
- 8. 最初のクラスが完了した後にJARが終了する
- 9. 子スレッドが実行を完了する前にメインスレッドが終了しますか?
- 10. アプリケーションマスタが終了してもヤーンアプリケーションが終了しない
- 11. アプリが終了したときにアプリが終了しない
- 12. Javaプログラムがクローズボタンで終了しない
- 13. 複数のスレッドが完了してからC++でプログラムを終了するまでの適切な方法11
- 14. スレッドの後のコールバック。開始()が終了しましたか?
- 15. ムービーがJMFで終了し、プログラムを終了しました
- 16. Java Spring:OutOfMemoryErrorの後でReRunがスレッドを終了しました
- 17. プログラムの終了後にDBが永続しない
- 18. C++プログラムが終了しない
- 19. perlスレッドがデタッチした後に終了する
- 20. Rubyはプログラムが終了した後にコンソールコマンドラインに入ります
- 21. スレッドが完了した後の引数の状態
- 22. フォークが完了する前にDockerが終了しますか?
- 23. スレッドが終了した後に文を実行
- 24. 親スレッド終了時に子スレッドが終了する
- 25. 終了していないJavaプログラム2
- 26. ノードプロセスが終了したときにすべてのchild_processを終了する
- 27. タスクが終了した後のAlarmManager
- 28. jNeuroMLでシミュレーションが完了/終了しましたか?
- 29. PHP/JavaScript。ブラウザの「負荷」永遠に、すべてのリソースがダウンロードが終了した後でも、プラスオペラ/クローム問題
- 30. プログラムが動作して終了する
ダイアログが閉じた後にデバッガでヒットします。デバッガはどのコードでブレークしますか?アクティブなスレッドは何ですか? – usr
アプリケーションが終了した後でVisualStudioの[出力]タブに(Debugビルドとして)報告されたメモリリークはありますか?これにはしばらく時間がかかります。 – Clemens
@ xml-tools:そうです、あなたは正しいです。いくつかのメモリリークが報告されています。私はそれらを見て、それらを修正しようとします。ありがとう。 – Ram