2016-03-23 28 views
0

私はループで動作しているタスクを実行しているスレッドを持っています。どのようにCPUを少なくすることができますか?

outTask::Task* task; 
while (!m_out_stop) { 
    println("abc"); 
    while (m_outQueue.pop(task)) { 
     println("123"); 
     task->execute(); 
    } 
} 

これをCPU使用量の少ない方法にするにはどうすればよいですか?私は各タスク間でスレッドをスリープさせることができますが、それは遅延の原因となり、理想的な解決策ではありません。

ps。 printステートメントはデバッグのためのものです。

+0

それを停止しない::収量()を行います。 withh C++ 11 std :: this_thread :: yield() – user5976242

+0

@ user5976242少なくともウィンドウでは、 'yield'はCPU使用量を減らしません。スケジューラには、そのCPU上でスケジューリングする他のスレッドがない場合は、ただちにスレッ​​ドを再スケジューリングして、CPUを調整します。 – sbabbi

+0

@sababbiあなたは正しいです。私はちょうど問題を理解していないと思う。他のスレッドが実行準備が整っていない場合は、最大CPUを使用してタスクを完了したい(CPU集中型であれば気にしない)。しかし、私の仕事がCPUを騒ぎ、他のスレッドが応答しない/スムーズに動かないようにするなら、私は降伏したい。 – user5976242

答えて

0

は、Windowsで作業している場合は、SetThreadPriorityを使用することができます。

outTask::Task* task; 
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_BELOW_NORMAL); 
while (!m_out_stop) { 
..... 

それはあなたの作業スレッドは最も遅い実行されますが、あなたはブースト:: this_threadを使用することができますブーストと

+0

ありがとうございます。これはクロスプラットフォームですか? – KaareZ

+0

いいえ、私は私の答えで(あなたが窓で働いているならば) –

+0

Sorrry、それを忘れました。私の悪い – KaareZ

関連する問題