2016-03-23 31 views
0

我有一個線程運行在一個循環中並執行任務。我怎樣才能讓這個cpu密集程度降低?

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

我該如何讓這個CPU佔用更少?我可以讓線程在每個任務之間休眠,但這會造成延遲,因此不是理想的解決方案。

Ps。打印語句用於調試目的。

+0

() 。 withh C++ 11你可以使用std :: this_thread :: yield() – user5976242

+0

@ user5976242至少在windows上,'yield'不會減少CPU使用率。如果你屈服了,但是調度器沒有其他的線程來調度那個cpu,它將會立即重新調度你的線程,從而限制cpu。 – sbabbi

+0

@sbabbi你是對的。我想我只是不明白這個問題。如果沒有其他線程準備好運行,那麼我想使用最大的CPU來完成我的任務(我不關心它是CPU密集型)。但是,如果我的任務是佔用CPU,並阻止其他線程的響應/操作順利,那麼我會想屈服。 – user5976242

回答

0

如果您在Windows工作可以用SetThreadPriority函數:

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

這使得運行速度最慢的工作線程,而與升壓,你可以使用boost :: this_thread ::產量停止

+0

謝謝。這是跨平臺嗎? – KaareZ

+0

不,我告訴你在我的答案(「如果你在窗戶工作」) –

+0

Sorrry,錯過了。我的錯 – KaareZ