スレッドの中でボタンクリックイベントを待つ方法 – プログラミング – Home

スレッドの中でボタンクリックイベントを...
 
通知
すべてクリア

[解決済] スレッドの中でボタンクリックイベントを待つ方法


a.hayashi
 a.hayashi
(@a.hayashi)
ゲスト
結合: 16年前
投稿: 7
Topic starter  

スレッドを作成して、その中で処理をしようと考えています。

ただ、ボタンをクリックするまでCPUにあまり負荷をかけないで、
スレッドの中で待機させていたいのですが、方法がよくわかりません
アドバイスお願いします。

10ms の無駄なタイムアウトを使ったループ無しに
WaitForSingleObject でボタンがクリックされるのをひたすら待っている?
ような方法ができたら良いなと思っています。

よろしくお願いします。

UINT Thread::TestThread(LPVOID pParam) /* 処理スレッド */
{

Thread *pInst = (Thread *) pParam;

/* BOOL m_ThreadFlag スレッド終了用フラグ */
while( pInst->m_ThreadFlag == ON/*1*/ ){

/* 処理スタートボタンがクリックされるまで、待つ */
if(::WaitForSingleObject(pInst->m_Thread->m_hThread,10)==WAIT_TIMEOUT ){
if(pInst->m_ButtonOnFlag != ON ){ /* ボタンクリック? */
continue; /* ボタンがクリックされるのを待つ */
} else {
pInst->m_ButtonOnFlag = OFF; /* フラグクリア*/
}
}

/* ↓処理↓ */
/* ↑処理↑ */

}
return 0;
}

void Thread::OnButton() /* ボタンクリックで呼び出される */
{
m_ButtonOnFlag = ON; /* ボタンがクリックした事を知らせるフラグ */
}


引用未解決
トピックタグ
a.hayashi
 a.hayashi
(@a.hayashi)
ゲスト
結合: 16年前
投稿: 7
Topic starter  

環境の記載忘れです。
VC++ 6.0 MFC です。


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

イベントを使います。MFC で言うと CEvent でしょうか。


返信引用
a.hayashi
 a.hayashi
(@a.hayashi)
ゲスト
結合: 16年前
投稿: 7
Topic starter  

aetos さん ありがとうございます。
アドバイスを参考に改造してみました。

思っていた動作ができていそうです。
ありがとうございます。

CEvent g_Event; //Event1

UINT CThreadDlg::SerialCommunicationThread(LPVOID pParam)
{
CThreadDlg *pInst = (CThreadDlg *) pParam;
HANDLE lpHandle;

lpHandle = g_Event; //イベントハンドルセット

while( pInst->m_ThreadFlag == 1 ){

::WaitForSingleObject( lpHandle , INFINITE );

/* 処理 */

}

return 0;
}

void Thread::OnButton() /* ボタンクリックで呼び出される */
{
g_Event.SetEvent(); //イベント発生通知
}


返信引用
a.hayashi
 a.hayashi
(@a.hayashi)
ゲスト
結合: 16年前
投稿: 7
Topic starter  

解決しました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました