3

このメッセージは何を意味していますか? Microsoft Windows ステータス クエリに «応答» する API はありますか?

技術的な答えを探しています。ありがとう :)

4

2 に答える 2

7

これは、プログラムがメッセージ キューの処理に失敗していることを意味します。ドキュメントから:

トップレベル ウィンドウが数秒以上メッセージへの応答を停止した場合、システムはウィンドウが応答していないと見なします。この場合、システムはウィンドウを非表示にし、同じ Z オーダー、位置、サイズ、および視覚属性を持つゴースト ウィンドウに置き換えます。これにより、ユーザーはそれを移動したり、サイズを変更したり、アプリケーションを閉じることさえできます。ただし、アプリケーションは実際には応答していないため、これらのアクションしか使用できません。デバッガー モードでは、システムはゴースト ウィンドウを生成しません。

通常、これは、プログラムのメイン スレッドがビジーであり、GetMessage十分な頻度で呼び出されていないことを意味します。長時間実行されるタスクは、メイン UI スレッド以外のスレッドで実行する必要があります。

于 2015-06-02T10:03:13.607 に答える
3

Windows アプリケーションは、ウィンドウ メッセージを受信することによってオペレーティング システムと対話します。これらのメッセージは、ループ内のメイン スレッドでアプリケーションによって処理されます。

アプリケーションが時間内にメッセージを処理できなかった場合 (数秒のマージンがあります)、メッセージ キューがいっぱいになり、Windows はこのアプリケーションを「応答なし」としてマークし、メイン ウィンドウを白っぽいものにします。

このような動作は、ほとんどの場合、ウィンドウ メッセージを処理する同じスレッドで長時間の操作を行うことによって発生します。このスレッドは、「メイン UI スレッド」と呼ばれることがよくあります。明示的なマルチスレッド化を行わない場合、それがアプリケーションの唯一のスレッドになる可能性があります。

于 2015-06-02T10:08:24.177 に答える