基本的に一連の複雑な計算を行うシングルダイアログアプリケーションを作成しました。アプリケーションは最初に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. 完了後にプログラムが終了する
- 3. すべて完了した後にSelenium WebDriverが終了する
- 4. C#プログラムが終了した後にコンソールが終了しない
- 5. すべてのスレッドを終了した後にアクティビティを終了します。
- 6. C#の実行が完了したがスレッドの実行が完了した後
- 7. MessageBoxが終了した後の終了プログラム
- 8. すべてのスレッドが終了した後にC#プロセスが残っている
- 9. スレッドが終了せず、プログラムが終了しない
- 10. プログラムの終了時にプロセスが終了しない
- 11. すべてのゴルーチンが終了したときにプログラムを終了する
- 12. Untidyプログラムの終了:MFC C++
- 13. EJBシングルトンは - スレッドが終了した後、「トランザクションがアクティブでない」
- 14. すべてのステップが完了したときにCasperJSが終了しないようにします。
- 15. 結合後にPythonスレッドが終了しない
- 16. スレッドが完了したイベントと完了したイベント
- 17. ASyncタスクが終了した後にアンドロイドサービスを終了する方法完了しましたか?
- 18. タスク。タスクが完了する前にすべて終了する
- 19. 子スレッドが実行を完了する前にメインスレッドが終了しますか?
- 20. 完了後に会話が終了しますか?
- 21. メソッドの終了後にonMapReady()の代入が終了しない
- 22. 最初のクラスが完了した後にJARが終了する
- 23. rubyを使用してrubyでプログラムが終了した後、クロムブラウザが自動的に終了します
- 24. 複数のスレッドが完了してからC++でプログラムを終了するまでの適切な方法11
- 25. Javaプログラムがクローズボタンで終了しない
- 26. アプリケーションマスタが終了してもヤーンアプリケーションが終了しない
- 27. 終了コード10で終了したプログラム
- 28. アプリが終了したときにアプリが終了しない
- 29. スレッドの後のコールバック。開始()が終了しましたか?
- 30. Specflowで最初のシナリオを完了した後にブラウザが終了する
ダイアログが閉じた後にデバッガでヒットします。デバッガはどのコードでブレークしますか?アクティブなスレッドは何ですか? – usr
アプリケーションが終了した後でVisualStudioの[出力]タブに(Debugビルドとして)報告されたメモリリークはありますか?これにはしばらく時間がかかります。 – Clemens
@ xml-tools:そうです、あなたは正しいです。いくつかのメモリリークが報告されています。私はそれらを見て、それらを修正しようとします。ありがとう。 – Ram