всеAssociate packaged_task и нити в C++
У меня есть класс:
class someClass
{
public:
vector<int> someOperation(int start, int end)
{
// do something...
}
}
и основные функции:
int main()
{
someClass obj;
std::packaged_task<vector<int>(int, int)> task(&someClass::someOperation);
std::thread t1 = std::thread(std::move(task), &obj, 0, 200); // Error happens here
std::thread t2 = std::thread(std::move(task), &obj, 201, 400);
std::thread t3 = std::thread(std::move(task), &obj, 401, 600);
t1.join();
t2.join();
t3.join();
return 0;
}
Я ожидаю, что этот код может создать три темы, которые работают так же работа на другой части фрагмента данных. Однако в определении потока t1, компилятор выскакивает следующая ошибка:
error C2046: term does not evaluate to a function taking 3 arguments
Могу ли я знать, что я не прав, и как я могу сделать это правильно?
Большое спасибо заранее.
Long
Не проблема здесь, но как вы думаете, 'std :: move (task)' делает? Так как он перемещается в первый поток, «задача» не будет действительна впоследствии для создания следующих потоков. –
Могу ли я не понимать смысл 'packaged_task', но почему бы вам не использовать некоторые' std :: future 'напрямую? –
@ArneMertz, откуда вы получаете фьючерсы? Вы можете * никогда * просто использовать фьючерсы напрямую. Вам нужен источник для них. 'packaged_task' является источником фьючерсов, которые дают результаты от выполнения функции. –