• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:DispatchMessage呼び出しでブロックする)

DispatchMessage呼び出しでブロックする

このQ&Aのポイント
  • Win32APIのDispatchMessageについて質問させてください。ゲームのように自動的に更新描画されるアプリケーションで、メッセージループと同じスレッドで描画処理を行うことを想定しています。
  • 通常の挙動として、ウィンドウメニューを開いたりした場合、DispatchMessageの呼び出しがブロックするようです。(メニューを閉じるまで関数が戻らない)
  • 描画ループとメッセージループを別スレッドで非同期に処理する方法も試しているのですが、「メニューアイテムを選択してもメッセージが来ない現象」(これの条件など詳しくは調査できてないです)が発生したりして、いろいろ悩まされてます。何か情報がありましたら教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

>通常の挙動として、ウィンドウメニューを開いたりした場合、DispatchMessageの呼び出しがブロックするようです。(メニューを閉じるまで関数が戻らない) というかメニューが内部的に独自のメッセージループのような処理をしているのでしょう。 キャプションをドラッグしてウィンドウを移動させている間も同じ感じですよね。 これを回避するにはやはり別スレッドにするしかないと思います。 で、メッセージが来ないというのは、単に描画スレッドが処理を占有してしまってメッセージループのスレッドの処理が行われていないのではと思います。 なので、描画ループの中で、適時Sleep()でスレッドの制御を渡してあげてみたらどうでしょうか?

mojimojio
質問者

お礼

解答ありがとうございます。 >というかメニューが内部的に独自のメッセージループのような処理をしているのでしょう。 なるほど、そういうものなんですね。 ウィンドウ移動中に止まってしまうのも同じく困りモノです。 >で、メッセージが来ないというのは、単に描画スレッドが処理を占有してしまってメッセージループのスレッドの処理が行われていないのではと思います。 これ関しては、そういう理由ではないようです。他のメッセージは処理できているので。 でも、別スレッドでどうにかするしかないようですね。ちょっと調べてみます。

mojimojio
質問者

補足

締め切り遅くなりました。回答ありがとうございました。