掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
スレッド処理の中断について (ID:58666)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
私を含めて3名とも内容的に同一の終了方法を提案しています。 私が説明したフラグ変数については、YuOさんが、ご指摘した volatile にすると、より確実です。 //ここでスレッド(m_pThread_Main)を終了したい ↑で、このまま終了する場合は、TerminateThread しかありませんが 通常の終了では、理由は既に示しているように 不味いです。 #エラー時の処理として、コードしては用意することはあります。 で、コードを拝見すると、SuspendThread でスレッドを休止させて いますので・・・。 #全部文章で思いましたが、やや苦手だからコード的に (^^ #漢字コードが入るかも知れないので、コピペすると #コンパイルエラーがでる可能性大 volatile BOOL flg=FALSE; ←クラスの中に大域変数として用意 [1] void CDlg::OnButtonStop() { m_pThread_Main->SuspendThread(); //スレッドの中断 int ret = AfxMessageBox("中止しますか?",MB_YESNO); if(ret == IDYES) //中止する場合 { //ここでスレッド(m_pThread_Main)を終了したい //そうであれば、ここで フラグを変更する flg=TRUE; } m_pThread_Main->ResumeThread(); //処理続行 } [2] スレッドは ResumeThread(); で処理続行していて、なおかつ ループで回していると思いますので(?)、ループの中でフラグが 変更されていれば、return でスレッドを抜ける。変更されて いなければ、「長い処理」の続行 ↓こんな感じ for(;;;) { if(TRUE==flg) return; ... 長い処理 ... } #もしかして、ループがない?・・・ そんときは #「長い処理」の中に、if(TRUE==flg) return; を #適量ばらまいて下さい。(この3行、普通は冗談です)
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.