私はループで動作しているタスクを実行しているスレッドを持っています。どのようにCPUを少なくすることができますか?
outTask::Task* task;
while (!m_out_stop) {
println("abc");
while (m_outQueue.pop(task)) {
println("123");
task->execute();
}
}
これをCPU使用量の少ない方法にするにはどうすればよいですか?私は各タスク間でスレッドをスリープさせることができますが、それは遅延の原因となり、理想的な解決策ではありません。
ps。 printステートメントはデバッグのためのものです。
それを停止しない::収量()を行います。 withh C++ 11 std :: this_thread :: yield() – user5976242
@ user5976242少なくともウィンドウでは、 'yield'はCPU使用量を減らしません。スケジューラには、そのCPU上でスケジューリングする他のスレッドがない場合は、ただちにスレッドを再スケジューリングして、CPUを調整します。 – sbabbi
@sababbiあなたは正しいです。私はちょうど問題を理解していないと思う。他のスレッドが実行準備が整っていない場合は、最大CPUを使用してタスクを完了したい(CPU集中型であれば気にしない)。しかし、私の仕事がCPUを騒ぎ、他のスレッドが応答しない/スムーズに動かないようにするなら、私は降伏したい。 – user5976242