2016-01-28 176 views
2

編輯/解決:Joachim Pileborg的答案爲我做了這份工作。 THX多線程設置線程數量通過命令行參數或

請溫和一點,因爲這是我的第一個問題。

我是實際的lerning和C++特別是線程玩。我尋找一個答案(如果沒有一個準備好的東西,我會驚訝的發現,但是我無法找到答案)。

所以回到主題: 我「玩」的代碼看起來是這樣的(控制檯應用程序)

void foo(){ 
//do something 
} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
std::thread t[threadcount]; 
     for (int i = 0; i < threadcount; ++i) { 
      t[i] = std::thread(foo); 
     } 
     for (int i = 0; i < threadcount; ++i) { 
      t[i].join(); 
     } 
} 

是否有可能通過設置ARGV的THREADCOUNT的價值? 如果沒有可能有人請給我如何實現

std::thread::hardware_concurrency() 

爲經緯其中一小段,因爲還存在的VisualStudio預先設定

const int threadcount = std::thread::hardware_concurrency(); 

感謝時給我一個錯誤。

回答

2

作爲threas的數量是由threadcount來控制,通過加入

int threadcount = atoi(argv[1]); 

到執行命令行設置它可以被實現。可以進行一些錯誤檢查,例如,在非正數的線程上報告錯誤。

如果要以編程方式確定線程數,則根據特定平臺,this question可能會很有趣。

+0

是的,這基本上是我的想法之一,但是當這樣做時,Visualstudio給我: C2057:預期的常量表達式 –

+0

如果我沒有弄錯,錯誤似乎不相關;你有沒有嘗試從'threadcount'的聲明中省略'const'? – Codor

+2

@OniuoniuOnuoinuo C++沒有[*可變長度數組*](http://en.wikipedia.org/wiki/Variable-length_array),因此您無法使用變量作爲大小創建數組。改爲使用['std :: vector'](http://en.cppreference.com/w/cpp/container/vector)。 –