2016-04-21 40 views
1

如果这个问题看起来很简单,我很抱歉。我仍然在学习线程。我已经尝试过在这里寻找解决方案,但没有找到任何解决方案。我试图让我的程序根据用户输入创建一些线程(例如:“cin >> 5”将创建5个线程),但它说“我在”线程myThreads [我] “需要是一个不变的价值。代码如下:程序根据用户输入不工作(cin)创建一些线程?

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; 
} 

有关如何修复该部分的任何想法?我尝试了几种不同的方法,但迄今为止还没有奏效。非常感谢你。

+1

你试过使用'std :: vector'吗? (例如'std :: vector myThreads(numThreads);') –

回答

1

多线程没有问题。问题是你用作动态数组的静态数组。

尝试是这样的:

thread* myThreads = new thread[numThreads]; 

更多关于用C动态内存++: http://www.cplusplus.com/doc/tutorial/dynamic/

UPD由詹姆斯Adkison: 不要忘记delete[]你的阵列以避免内存泄漏。

+0

是'C++'为什么不推荐使用'std :: vector'?不直接处理动态内存分配通常是一个好主意(例如,使用'std :: unique_ptr'和'std :: make_shared')。 –

+0

它现在工作。非常感谢你。对此,我真的非常感激。 –

+1

@G_Man确保你知道这个代码不是异常安全的,并且如果delete []没有执行,会泄漏资源。 –

相关问题