0
我有一個類:
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
可我知道我是什麼錯了,我怎麼能做到這一點嗎?
非常感謝提前。
朗
這裏沒有真正的問題,但是你認爲'std :: move(task)'有什麼作用?由於它被移動到第一個線程中,因此'任務'在創建下一個線程之後將不再有效。 –
可能是我沒有理解'packaged_task'的含義,但爲什麼不直接使用'std :: future's? –
@ArneMertz你從哪裏得到期貨?你可以*永遠不會直接使用期貨。你需要一些資源。 'packaged_task'是產生執行函數結果的期貨來源。 –