c++ - 根据用户输入创建多个线程的程序不起作用 (cin)?

标签 c++ multithreading

如果这个问题看起来很简单,我深表歉意。我还在学习线程。我已经尝试在这里寻找解决方案,但没有找到。

我试图让我的程序根据用户输入创建多个线程(例如:“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/

James Adkison 更新: 不要忘记 delete[] 您的数组以避免内存泄漏。

关于c++ - 根据用户输入创建多个线程的程序不起作用 (cin)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36782156/

相关文章:

c++ - 尝试构建 C++ .DLL 时出现类型/转换错误

c++ - 在 C++ 中使用回调函数抓取帧。它如何与类(class)交流?

c++ - SDL2 在 Fedora 21 中调整 buggy 但在 Windows 中正常

java - Keep-alive 如何与 ThreadPoolExecutor 一起工作?

java - Spring的Singleton作用域bean在Web应用程序中的表现如何?

java - 面对多线程堆栈跟踪 - 该进程无法访问该文件,因为它正被另一个进程使用

c# - 特定处理器同时运行的线程数是多少?

c++ - 如何在Dev C++中使用Eigen库?

c++ - 如何在 visual studio 2015 构建结束时复制文件

c# - 以指定的时间间隔运行方法c#