アプリケーションでWS_EX_COMPOSITEDスタイルを使用していますが、CPUを100%実行していますが、アプリケーションの描画をしばらく停止し、必要な場合にのみ再開する方法はありますか?Sleepを使用することを提案している人もいますが、WndProcのどこにスリープを設定しますか?
前もって感謝します。
アプリケーションでWS_EX_COMPOSITEDスタイルを使用していますが、CPUを100%実行していますが、アプリケーションの描画をしばらく停止し、必要な場合にのみ再開する方法はありますか?Sleepを使用することを提案している人もいますが、WndProcのどこにスリープを設定しますか?
前もって感謝します。
使用しないでくださいSleep
。それはほとんど問題のない解決策です。
確かにWS_EX_COMPOSITED
CPUを占有する可能性がありますが、私の経験ではほとんどがXPです。Vista以降では、パフォーマンスへの影響はそれほど大きくありません。ただし、アプリがアイドル状態の場合、再描画は行われません。CPUが100%で、アプリがアイドル状態の場合は、処理に問題がありますWM_PAINT
。あなたが説明することは、ペイントサイクルの無限のループのように聞こえます。正しくやれば、使ってもそんなことはありませんWS_EX_COMPOSITED
。
ダブルバッファリングを行う正しい方法に関しては、BeginBufferedPaint
Vista以降でこれを行うための最新の方法です。
アプリケーションのスレッドをスリープ状態にすると、アプリケーションのUIが応答しなくなります。独自のスレッドで描画コードを実装する必要があるように思えます。その後、アプリケーションの残りの部分に影響を与えることなくそのスレッドをスリープできますが、スリープの代わりにイベントとWaitForSingleObject/WaitForMultipleObjects呼び出しを使用することをお勧めします。