掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
PostThreadMessageとPeekMessageについて (ID:65466)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>状態が見たいのは、ワーカスレッドのメッセージキューですよね? すみません。その通りです。 実際にワーカースレッド側でやってみました。 ちなみに ☆GUI側テスト用ボタンイベント void CxxxDlg::OnBtnDummy() { // スレッドに変更を通知 int i,n; for (i = 0; i < 100; i++) { n = RecvThreadHandle->PostThreadMessage(WM_CHGSET, 0, 0); if (n != 1) TRACE("PostThreadMessage_ERR!!\n"); } TRACE("送信完了\n"); } ☆スレッド側 unsigned int xxxxxThread(void *pParam) { 〜変数設定等(省略)〜 // メッセージキュー作成 PeekMessage(&Msg, NULL, 0, 0, PM_NOREMOVE); ☆初回にコレを呼ぶ事によりMsgキューが作成されると MSDNにあったもので。 DWORD aaa; while(1) { aaa = GetQueueStatus(QS_POSTMESSAGE); TRACE("PeekMessage直前/GetQueueStatus():[0x%08x]\n", aaa); // メッセージ処理 nRet = PeekMessage(&Msg, NULL, 0, 0, PM_NOREMOVE); aaa = GetQueueStatus(QS_POSTMESSAGE); TRACE("PeekMessage[nRet=%d]/GetQueueStatus():[0x%08x]\n", nRet, aaa); if (nRet != 0) { GetMessage(&Msg, NULL, 0, 0); if (Msg.message == WM_THREADSTOP) { // スレッド停止メッセージ TRACE("停止Msg!\n"); // スレッド終了 break; }else if (Msg.message == WM_CHGSET){ // 設定変更メッセージ TRACE("設定Msg!\n"); ☆設定変更処理 Sleep(100); continue; } Sleep(100); ☆ファイルの存在確認処理 if (FileCount == 0)){ Sleep(100); continue; } ☆ファイルがあった場合の処理 ☆親ウィンドウ(GUI)にメッセージを送り内容を表示させる。 Sleep(300); } と、こんな感じにしてます。実行した結果ですが・・・ PeekMessage直前/GetQueueStatus():[0x00000000] PeekMessage[nRet=0]/GetQueueStatus():[0x00000000] 送信完了 送信完了 送信完了 送信完了 PeekMessage直前/GetQueueStatus():[0x00080008] PeekMessage[nRet=1]/GetQueueStatus():[0x00080000] 設定Msg! 一部ではありますが、ずっとこのような感じで続きます。 昨日の時点では「送信完了」と表示されても「設定Msg!」で表示されない 場合が多々あったのですが、今日は現象が起きていません。 「送信完了」で100回送られているので計400回送られている筈ですが 「設定Msg!」は一度しか表示されてません。 400回「設定Msg!」が表示されるべきだと思うのですが・・・。 ちなみに、GetQueueStatus()の引数にQS_SENDMESSAGEを入れて試して みましたがメッセージ送信前後とも0が帰ってきました。 <MSDN> 上位ワードは、現在メッセージキューの中に存在するメッセージタイプ (flags パラメータを参照)を示します。 </MSDN> これはこれで?の気が・・・0x00400000が帰ってくるなら解るのですが・・・
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.