我在理解C++ STL中作爲線程例程的函數對象的正確用法時遇到了一些困難。根據我的理解,函子的一個好處是對象實例可以保持狀態。有時候我想要一個或多個線程運行一些例程並計算一些結果。然後我在加入線程後查詢這些對象的結果。我試圖用C++ STL線程做同樣的事情,並遇到一些問題。看來問題源於C++ STL線程複製了我的對象,因此我不確定在加入線程時如何檢查結果。這裏的代碼片段:正確使用functor for C++ STL線程
#include <iostream>
#include <thread>
using namespace std;
class Worker
{
public:
Worker() : _value(0)
{
}
void operator()(unsigned int value);
unsigned int get_value() {return this->_value;}
private:
unsigned int _value;
};
void Worker::operator()(unsigned int value)
{
this->_value = value;
}
int main()
{
Worker worker;
thread thread(worker, 13);
thread.join();
unsigned int value = worker.get_value();
cout << "value: " << value << endl;
}
上面的例子是我遇到的問題只是一個簡單的攝製。我期望worker.get_value()返回13,但它返回零。我該如何去實例化一個具有狀態的對象,讓線程在該對象中運行例程,然後在線程完成後查詢該對象的狀態?
感謝, 尼克
[Demo](http://melpon.org/wandbox/permlink/hLi31ibs7nc3VqnK) –