2

メッセージボックスAPIに問題があります。messageboxwを使用してユーザーに質問します。たとえば、私のプログラムはスレッドなどで非常に忙しく、ユーザーがメッセージボックスを表示するボタンをクリックしても、プログラムが以前よりも忙しくなるまでメッセージボックスは表示されません。メッセージボックスを削除すると、正常に実行された後のコードです。表示するにはコードが多すぎますが、注意しなければならないことがあるかもしれません...

誰もがこの経験をしましたか?

ご協力いただきありがとうございます。

4

1 に答える 1

10

ボタンをクリックすると、メッセージがメッセージキューに投稿されます。次にメッセージキューをポンプするまで、それは処理されません。したがって、ボタンをクリックしてからプログラムが応答するまでに遅延が見られる場合は、メッセージキューがタイムリーに処理されていないためです。

GUIスレッドがビジー状態の場合、メインスレッドが実行している処理が終了するまで、メッセージキューはポンプされません。また、GUIスレッドで長時間実行するタスクがある場合、GUIスレッドはビジーになります。キューに入れられたボタンクリックメッセージが最終的に処理されると、を呼び出すとMessageBoxWすぐにダイアログが表示されます。

GUIスレッドが実行されない他の唯一の理由は、CPUがより優先度の高いスレッドによって消費された場合です。しかし、それはほとんどあり得ません。アプリケーションが優先度の高いスレッドを使用することは非常にまれです。あなたがそうしているとしたら、私は驚きます。

問題を解決する方法は?メインスレッドで長時間実行されているタスクがある場合は、それらのタスクをバックグラウンドスレッドに移動します。または、GUIスレッドの実行を停止する優先度の高いスレッドがある場合は、バックグラウンドスレッドを通常の優先度で実行します。

于 2012-09-02T17:20:22.343 に答える