Windows クリティカル セクションにキューの概念はありませんか?
専用スレッドに次のレンダリング ループがあります。
while (!viewer->finish)
{
EnterCriticalSection(&viewer->lock);
viewer->renderer->begin();
viewer->root->render(viewer->renderer);
viewer->renderer->end();
LeaveCriticalSection(&viewer->lock);
}
メイン スレッドはメッセージ処理を行い、マウス イベントを処理するときに同じクリティカル セクションに入ろうとしますが、何らかの理由で、メイン スレッドが最終的に入る前にレンダリング スレッドをさらに 1000 回 (約 10 秒) 実行します。クリティカルセクション。これを引き起こしているのは何ですか - セクションに入る「キュー」がなくても、私の場合のように 99.9/0.1 ではなく、50/50 のようにすべきではありませんか? 両方のスレッドの優先度は 0 です。
そして、そのようなキューを追加する良い方法は何ですか? bDoNotRenderAnything のような単純なフラグで十分でしょうか?
編集:私の場合の解決策は、メッセージハンドラーがクリティカルセクションへのアクセスを必要とするたびに設定され、それを使用した後にリセットされるイベントオブジェクトを追加することでした(ブール変数もおそらく機能します)。変数/イベントが設定されている場合、レンダラーはセクションに入りません。このようにして、メッセージ ハンドラーは複数回のレンダリングの繰り返しを待つ必要がなくなります。