使用boost线程从特定于线程的代码返回值

Ser*_*jev 0 c++ boost

我正在使用像这样的C++ boost库线程

MyThread alarm();
boost::thread thrd(alarm);
if (thrd.timed_join(boost::posix_time::seconds(timeout)))
{
    cout << alarm.modified_var << endl;
}
else
{
    cout << alarm.modified_var << endl;
}
Run Code Online (Sandbox Code Playgroud)

modified_var在MyThread类中更改,但是当我在同步点之后打印它时,我得到modified_var的单位化值.我究竟做错了什么?

Bjö*_*lex 6

这是因为alarm-object 在传递给thread构造函数时复制.解决方案是将其包装在boost::ref:

boost::thread thrd(boost::ref(alarm));
Run Code Online (Sandbox Code Playgroud)