掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
スレッドに関するエラーを解決するには? (ID:69234)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
コンパイラは何? VC++6.0 であるとして (新しいコンパイラではエラーになる記述がある) めんどくさくて高度な問題はとりあえずおいておいて ワーカースレッドを作って終了させるという一点だけに注目するなら ワーカースレッドの起動:提示コードで正しい。新しいコンパイラでエラーになるので AfxBeginThread(&CDlg::PpsnThreadFunc, this) としておこう。 ワーカースレッドの終了:ワーカースレッドが自ら終了するのが最善 UI スレッド側で行う処理は m_bThread=FALSE; だけでいい ワーカースレッド側では m_bThread を適宜監視して自ら終了 AfxEndThread を明示的に呼び出すよりは単に return するのが良いと思う というわけで簡単にサンプル書いてみた m_bThread と逆ロジックにしてあるので注意 void CMtdlgDlg::OnStart() { if (m_pThread!=0) return; m_ExitThread=0; m_pThread=AfxBeginThread(&CMtdlgDlg::ThreadFuncSugar, this); } void CMtdlgDlg::OnStop() { if (m_pThread==0) return; m_ExitThread=1; } UINT CMtdlgDlg::ThreadFuncSugar(void* p) { return reinterpret_cast<CMtdlgDlg*>(p)->ThreadFunc(); } UINT CMtdlgDlg::ThreadFunc() { while (m_ExitThread==0) { CString text; GetDlgItemText(IDC_COUNTER, text); long x=_tcstol(text, 0, 0); text.Format(_T("%d"), x+1); SetDlgItemText(IDC_COUNTER, text); } return 0; } OnStart で二回目を開始できないとか問題点が残っているけど、宿題にするかな。 これ直そうとすると結構めんどくさいんで
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.