36318


for文等を用いて、スレッドを複数作成したいのですが、エラーが出てしまい作りきれません。  
途中までのコードを添付します。  
よろしくお願いいたします。

[code]

    void ThreadController::Process_Thread(){
    　　　　vector<ThreadSet> threadData;           // 各スレッドのデータを格納
    　　　　ThreadSet oneData = { 0 };              // 1つのスレッドのデータを格納
    　　　　vector<thread> threads;                 // 複数スレッドを格納
    
    　　　　int dataNum = 0;                        // スレッド数を格納
    　　　　int i = 0;                              // ループ用変数
    
    　　　　// スレッド数の入力
    　　　　cout << "スレッド数" << endl;
    　　　　dataNum = Set_IntNumber();
    
    　　　　// 各スレッドのデータを入力
    　　　　for (i = 0; i < dataNum; ++i) {
    
    　　　　　　　　cout << "名" << endl;
    　　　　　　　　cin >> oneData.threadName;
    
    　　　　　　　　cout << "タイム" << endl;
    　　　　　　　　oneData.intervalTime = Set_IntNumber();
    
    　　　　　　　　// スレッドデータに追加
    　　　　　　　　threadData.push_back(oneData);
    　
    
    　　　}
        // スレッド実行
        for (i = 0; i < dataNum; ++i) {
            thread threads(Count_SpecifyInterval, threadData[i]);
        }
    
    　　　　// 終了を待つ
    　　　　for (thread &th : threads) {
        　　　　th.join();
    　　　　}
    
    }
    
    
    int ThreadController::Set_IntNumber(){
    int intervalTime = 0;                   // 入力された実行間隔を格納する変数
    
    do {
        // 実行間隔の入力
        cout << ">";
        cin >> intervalTime;
    
        // 数字以外が打たれたときエラーを返す
        if ((cin.fail()) || (intervalTime < TIME_MIN)) {
            cin.clear();
    
            // バッファを空に
            while (getchar() != '\n');
    
            cout << "正の整数のみ入力してください" << endl;
            intervalTime = ERROR;
        }
        else {
            // エンターキー読み捨て
            getchar();
        }
    
    // 正の数でない場合再入力
    } while (intervalTime < TIME_MIN);
    
    return intervalTime;
    }
    
    void ThreadController::Count_SpecifyInterval( ThreadSet& dataSet ){
    int i = 0;                              //
    
    while ( i < COUNT_MAX ) {
    
        // 動作の待機
        this_thread::sleep_for(chrono::milliseconds(dataSet.intervalTime));
    
        // カウントの加算、表示
        ++i;    
        cout << dataSet.threadName << ":" <<i << endl;
    }
    }
    
[/code]


CC BY-SA 3.0
2017-07-13T06:37:28.480
36316
2017-07-13T07:46:56.137
24381
question
c++ マルチスレッド
マルチスレッドプログラム

[code]

    oid ThreadController::Process_Thread(){
    
    vector<ThreadSet> threadData;           // 各スレッドのデータを格納
    ThreadSet oneData;              // 1つのスレッドのデータを格納
    vector<thread> threads;                 // 複数スレッドを格納
    thread oneThread;
    
    int dataNum = 0;                        // スレッド数を格納
    int i = 0;                              // ループ用変数
    
    // スレッド数の入力
    cout << "スレッド数" << endl;
    dataNum = Set_IntNumber();
    
    // 各スレッドのデータを入力
    for (i = 0; i < dataNum; ++i) {
    
        cout << "名" << endl;
        cin >> oneData.threadName;
    
        cout << "タイム" << endl;
        oneData.intervalTime = Set_IntNumber();
    
        // スレッドデータに追加
        threadData.push_back(oneData);
    
    }
    
    try {
        // スレッド実行
        for (i = 0; i < dataNum; ++i) {
            threads.push_back(thread (Count_SpecifyInterval, threadData[i]));
        }
    }
    catch (exception &ex) {
        cerr << ex.what() << endl;
    }
    // 終了を待つ
    for (thread &th : threads) {
        th.join();
    }
    
    }
    
[/code]

いろいろいじっていたらこれで出来ました。  
以上です。


CC BY-SA 3.0
2017-07-13T07:46:46.570
36318
2017-07-13T07:46:46.570
24381
36316
answer


>
[code]

>     vector<thread> threads;                 // 複数スレッドを格納
>  
[/code]

>
> ...
[code]

>     // スレッド実行
>     for (i = 0; i < dataNum; ++i) {
>         thread threads(Count_SpecifyInterval, threadData[i]);
>     }
>  
[/code]

`vector<thread> threads`と`thread threads`と同名別変数を定義しています。  
`thread`を作成し`vector<thread>`に格納するには

[code]

    threads.emplace_back(Count_SpecifyInterval, threadData[i]);
    
[/code]

と記述します。


CC BY-SA 3.0
2017-07-13T07:46:56.137
36319
2017-07-13T07:46:56.137
2020-06-17T08:14:45.997
-1
4236
36316
answer