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

我正在尝试让我的程序根据用户输入创建多个线程(例如:“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[]以避免内存泄漏。

07-27 13:39