C++ 基于用户输入不工作(cin)创建多个线程的程序?
如果这个问题看起来很简单,我很抱歉。我还在学习线程。我已经尝试在这里搜索解决方案,但没有找到任何解决方案 我试图让我的程序根据用户输入创建一些线程(例如:“cin>>5”将创建5个线程),但它说“threads myThreads[I]”中的“I”需要是一个常量值。代码如下:C++ 基于用户输入不工作(cin)创建多个线程的程序?,c++,multithreading,C++,Multithreading,如果这个问题看起来很简单,我很抱歉。我还在学习线程。我已经尝试在这里搜索解决方案,但没有找到任何解决方案 我试图让我的程序根据用户输入创建一些线程(例如:“cin>>5”将创建5个线程),但它说“threads myThreads[I]”中的“I”需要是一个常量值。代码如下: void exec(int n) { cout << "Thread " << n << endl; } int main() { int numThreads =
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;
}
void exec(int n)
{
cout多线程没有问题。问题是您将静态数组用作动态数组
试着这样做:
thread* myThreads = new thread[numThreads];
有关C++中动态内存的更多信息:
詹姆斯·阿德基森的UPD:
不要忘记delete[]
您的数组以避免内存泄漏。isC++
为什么不建议使用std::vector
?通常最好不要直接处理动态内存分配(例如,使用std::unique\u ptr
和std::make\u shared
)。现在可以使用了。非常感谢。我非常感谢。@G_Man确保您知道此代码不是异常安全的,如果不执行delete[]
,将泄漏资源。@James Adkison噢,好的。非常感谢。您试过使用std::vector
?(例如,std::vector myThreads(numThreads);
)