2016-04-21 11 views
1

この質問が簡単であれば謝罪します。私はまだスレッドについて学んでいます。私はすでにここでこれに対する解決策を探してみましたが、何も見つかりませんでした。ユーザー入力に基づいて多数のスレッドを作成するプログラムは動作しません(cin)?

ユーザー入力(例: "cin >> 5"は5つのスレッドを作成します)に基づいてスレッドを作成するようにプログラムを作成しようとしていますが、スレッド "myThreads [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; 
} 

どのようにそのセクションを修正することができますか?私はいくつかの異なる方法を試しましたが、これまでに働いていません。どうもありがとうございました。

+1

'std :: vector'を使ってみましたか? (例えば 'std :: vector myThreads(numThreads);') –

答えて

1

マルチスレッドで問題はありません。問題は、動的配列として使用する静的配列です。

thread* myThreads = new thread[numThreads]; 

よりC++の動的メモリについて:ジェームズAdkisonことで http://www.cplusplus.com/doc/tutorial/dynamic/

UPD: はメモリリークを避けるために、あなたの配列をdelete[]することを忘れないでください

はこのような何かを試してみてください。

+0

'C++'は 'std :: vector'を使うことをお勧めしませんか?動的メモリ割り当て( 'std :: unique_ptr'や' std :: make_shared'など)を直接扱わないことは、通常は良い考えです。 –

+0

これで動作します。どうもありがとうございました。ほんとうにありがとう。 –

+1

@G_Manこのコードは例外ではなく、 'delete []'が実行されないとリソースをリークすることに注意してください。 –

関連する問題