掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
PostThreadMessageとPeekMessageについて (ID:65457)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
順番が変わってしまいますが・・・。 >MFCのクラスを使う場合には、AfxBeginThreadである必要がありますね。 よくよく考えてたら、スレッドの中でMFCと言ったらCString程度しか 使ってない事に気が付きました・・・。stringクラスにしてしまえば _beginthread(ex)でも良いんですよね? とは言ってももうAfx〜()にしてしまったのでそのまま行くつもりですが。 >CreateEventというAPIがあります。同期オブジェクトの一種で、いわゆるフラグです。 これで、終了通知とオプションの変更通知のフラグを作って、 GUIスレッドの方でフラグをONしてやって、ワーカースレッドで 参照してOFFにするって感じでしょうか?調べてみます。 >スレッド内部が例えばGUIなどのために、メッセージループ(GetMessageやPeekMessage)を必要としているならば 例えばワーカースレッドでプログレスバーを表示したりする場合で の処理状況をGUIスレッドから処理状況を受け取る必要がある場合 なんてのが該当する例でしょうか? そうなると私の場合は基本的にフラグとしての通知するだけだから あまりメッセージを使うメリットはないんですね。 >唯のグローバルか、 これが一番早くて楽ですね・・・あまり使いたくはありませんが。 回答有難う御座いました。 イベントを使う方法も考慮してもうちょっと頑張ってみます。 で、話が本題とちょっとズレてしまって、結局ズバリの回答が無い のですが、結局「メッセージの取りこぼし」と言うのは普通にある のでしょうか? for (int i = 0; i < 100; i++){ RecvThreadHandle->PostThreadMessage(WM_CHGSET, 0, 0); } DWORD Val = GetQueueStatus(QS_POSTMESSAGE); TRACE("GetQueueStatus:[0x%08x]\n", Val); この書き込みをするまでの間色々とやってみました。 上記のルーチンは、100回設定変更のメッセージを投げつけ、 GetQueueStatus()でキュー内のメッセージの個数(?)を表示させてる (つもり)なんですが、このソースをボタンAとボタンBで実行させると GetQueueStatus()の結果が違うのです。片方は0x00080008で片方は0です。 このルーチンでは100回連発してますが、スレッド側では1回しか受けつけません。 (スレッド側ではpeekmessageが受信した所でTRACE()で表示させてます。) また単発で送信する様にした場合でも、押した回数だけ反応したりしなかったりです。 環境はWin2Kですが、MSDNを見るとメッセージ数の上限は10000個の様なので、 100回ぐらいじゃ屁でもないと思うのですが。自分で送りつけてるもの以外にも OSやGUIから何らかのメッセージがバンバン来てるってのもあるのでしょうか? そう思ってPeekMessage()のフィルタ引数も「自分メッセージの範囲だけ」に 設定してみたりもしたのですが。。 イベントで処理をする事により上手く行くのは良いのですが、やり始めて腑に 落ちずにやり方を変えるのも気分が悪いので、もしどなたか回答&お付き合い 頂ける方おりましたらレス下さい。 長文申し訳ありません。宜しくお願い致します。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.