掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
スレッドを安全かつ確実に停止するには? (ID:72234)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
いつもお世話になっております。 Win7 Enterprise(x64) + VS2010 Professional のVC++でSDKで開発をしてお ります。 現在マルチスレッドアプリケーションを作成しているのですが、スレッドの 停止のさせ方について教えていただきたく書き込みをいたしました。 かなり端折りますが… //停止用フラグをグローバル変数で宣言 BOOL g_fStop = FALSE; //スレッドのハンドルとID HANDLE g_hThread; DWORD g_dwThreadID; //スレッド関数 DWORD ThreadProc(void *param) { for(;;) { if(g_fStop == TRUE) { break; } Sleep(1000); } return 0; } たとえばこのようなグローバル変数およびスレッド関数を作成したとします。 CreateThredでこのスレッドを開始後、停止をするときに、 DWORD l_dwExitCode; g_fStop = TRUE; do { Sleep(500); GetExitCodeThread(g_hThread, &l_dwExitCode); }while(l_dwExitCode == STILL_ACTIVE); とすれば、停止まで待機して安全に終了してくれると思ったのですが… いつまでたっても、STILL_ACTIVEのままなんです。 デバッグでブレークポイントにThreadProcの if(g_fStop == TRUE) { break; } のbreakの行に入れてみたのですが、グローバル変数を変更しても、ここに到 達しないんです。 TerminateThreadを実行してしまうと、スレッド関数内で利用しているポイン タなどが正常に解放されずメモリリークの原因になると思うので、行いたく ないのですが、このやり方は、誤っているのでしょうか? (誤っているから停止しないのだと思うのですが…) このようにスレッド内で無限ループになっているものを安全かつ確実に停止 するには、どのようにすればよいのでしょうか? ご存知の方から見ればどうしようもない質問かもしれませんが… なにとぞ、よろしくお願いいたします。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.