2015-08-27 58 views
4

我正在使用std :: threads,在我的設置中,我的其他線程(可變數量,當前設置爲10)正在使用如此多的容量,以至於我在任務管理器中使用的cpu達到100%爲應用程序。這使我的主線程滯後,這應該是實時的(我認爲這是滯後的原因)。C++線程最大CPU

我用英特爾放大器調試,但沒有其他線索爲什麼主線程應該滯後。我的輔助線程在哪裏都很忙。

是否可以告訴一個線程有多少CPU可以使用最大?我怎樣才能確保我的其他線程不影響我的主線程的性能?

主題初始化:

for (int i = 0; i < numberOfThreads; i++) 
{ 
    std::thread* thread = new std::thread(&MyClass::mWorker, this); 
    mThreads.push_back(thread); 
} 

我的系統:i5-4590 3.3GHz的,8 GB RAM,Windows 8的64位,OGRE3D圖形引擎

+3

您可以將其他線程設置爲比主線程更低的優先級:在C++ 11中不可能直接使用,但可以使用「native」線程ID - 請參閱[這裏](http://stackoverflow.com/questions/18884510/portable-way-of-setting-stdthread-priority-in-c11)供討論/細節。 –

+2

我同意託尼D.你也可以考慮有條件地睡眠你的較低優先級的線程。 – gpicchiarelli

+3

您也可以在當前的設計和實施中尋找改進。 – UmNyobe

回答

8

我不認爲有任何C++ 11意味着可以這樣做,但是您可以使用native_handle中的平臺線程調度功能,您可以從std::thread獲取這些功能,然後設置線程的優先級(例如 - 優先考慮主線程)或設置線程相關性,以便主線程綁定到一個不被任何工作線程使用的獨佔核心。