掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
PostThreadMessageとPeekMessageについて (ID:65447)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
お世話になります。VC6でMFC使ってます。 GUIから、ワーカースレッドに対してメッセージを 投げたいと思ってます。ソースの要所のみ書きます。 <<GUIスレッド側>> 1.ワーカスレッド生成時 ThreadHandle = _beginthreadex(NULL, 0, AAAAAA, (void*)&Param, 0,&ThreadID); 2.停止メッセージ&停止時のルーチン #define WM_THREADSTOP (WM_APP + 200) int n = PostThreadMessage(ThreadID, WM_THREADSTOP, 0, 0); 3.ワーカスレッド関数 unsigned int WINAPI AAAAAA(void *pParam) { BOOL bEndFlg = FALSE; while(1) { // メッセージ処理 ☆1 if (PeekMessage(&Msg, (HWND)-1, 0, 0, PM_REMOVE) != 0) ☆2 if (PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE) != 0) { switch(Msg.message) { case WM_THREADSTOP: // スレッド停止メッセージ // 終了フラグセット bEndFlg = TRUE; break; default: break; } } // スレッド終了判定 if (bEndFlg) break; Sleep(300); } _endthreadex(0); return (0); } メインの処理部分は割愛しましたが、見ての通りで自作 メッセージ(WM_THREADSTOP)をトリガにして、スレッドの 停止をしたいと思ってます。 2.のPostThreadMessage()の戻り値は「1」でメッセージ そのものは投げられているようなのですが、3で受け取る事が 出来ません。★部分のPeekMessage()に関して、MSDNを参照 すると・・・ ---------------------------------------------------- 以下MSDN引用 hWndパラメータでNULLを指定した場合、PeekMessage 関数を 呼び出した現在のスレッドに所属する任意のウィンドウに関連 付けられているメッセージを取得します(PeekMessage 関数は、 ほかのスレッドに所属するウィンドウに関連付けられているメッ セージは取得しません)。(☆.1) hWnd パラメータで-1を指定すると、PeekMessage 関数は、 PostThreadMessage 関数がポストした、hWnd パラメータで NULLを指定しているメッセージを取得します。(☆.2) ---------------------------------------------------- どちらのパターンも試したのですが無理でした。又、 ---------------------------------------------------- PeekMessage は必ず WM_QUIT メッセージを取得することに 注意してください。 ---------------------------------------------------- 2.でWM_QUITを投げたら届きました・・・。 自前のメッセージが届かないのは何が問題なのでしょうか? 宜しくお願いします。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.