2016-01-28 205 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)。 –