如果这个问题看起来很简单,我深表歉意。我还在学习线程。我已经尝试在这里寻找解决方案,但没有找到任何解决方案。
我正在尝试让我的程序根据用户输入创建多个线程(例如:“cin >> 5”将创建5个线程),但它说“threads myThreads [i]”中的“i”必须为一个恒定值。代码如下:
void exec(int n)
{
cout << "Thread " << n << endl;
}
int main()
{
int numThreads = 0;
// create threads
cin >> numThreads;
thread myThreads[numThreads]; // this part says myThreads "must be a constant value"
for (int i = 0; i < numThreads; i++)
{
myThreads[i] = thread(exec, i);
}
for (int i = 0; i < numThreads; i++)
{
myThreads[i].join();
}
cout << "Done!" << endl;
}
关于如何固定该部分的任何想法?我尝试了几种不同的方法,但到目前为止它们还没有奏效。非常感谢你。
最佳答案
多线程没有问题。问题是您将静态数组用作动态数组。
尝试这样的事情:
thread* myThreads = new thread[numThreads];
有关C++中动态内存的更多信息:
http://www.cplusplus.com/doc/tutorial/dynamic/
UPD作者:James Adkison:
不要忘记对数组进行
delete[]
以避免内存泄漏。