Цикл для создания потоков и объединения с переменным количеством потоков - PullRequest
0 голосов
/ 16 ноября 2018

Я создаю программу, которая в целях тестирования может создать N потоков в C ++. Я новичок в C ++, и моя нынешняя попытка пока что

//Create a list of threads
std::vector<std::thread> t;
for(i=0; i < THREADS; i ++){
    std::thread th = std::thread([](){ workThreadProcess(); });
    t.push_back(th);
    printf("Thread started \n");
    }

for(std::thread th : t){
    th.join();
}

У меня в настоящее время ошибка, которая говорит о вызове удаленного конструктора 'std :: thread'. Я не знаю, что это значит или как исправить в

Примечание:
Я смотрел на:

Но я не чувствую, что они отвечают на мой вопрос. Большинство из них используют pthreads или другой конструктор.

1 Ответ

0 голосов
/ 16 ноября 2018

Вы не можете копировать темы.Вы должны переместить их, чтобы поместить их в вектор.Кроме того, вы не можете создавать временные копии в цикле, чтобы присоединиться к ним: вместо этого вы должны использовать ссылки.

Здесь рабочая версия

std::vector<std::thread> t;
for(int i=0; i < THREADS; i ++){
    std::thread th = std::thread([](){ workThreadProcess(); });
    t.push_back(std::move(th));  //<=== move (after, th doesn't hold it anymore 
    std::cout<<"Thread started"<<std::endl;
    }

for(auto& th : t){              //<=== range-based for uses & reference
    th.join();
}

Демоверсия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...