使用 boost::thread 运行函子,但析构函数被错误地调用

use boost::thread to run a functor but destructor is wrongly called

本文关键字:析构函数 错误 调用 thread boost 运行 使用      更新时间:2023-10-16

我使用 boost::thread 来运行一个函子。我想看到对象a的析构函数在主线程中被调用两次。但是,有时,我发现析构函数在主线程中调用一次,在调用的线程中调用一次。A类做一些复杂的事情,因此这种现象并不总是发生。有人知道这是怎么发生的吗?

int main()
{
A a; // A is a functor
boost::thread myThread(a);
while (true)
{
// sleep every second until interruption caught
}
myThread.interrupt();
myThread.join();
}

顺便说一下,我现在使用 boost::thread myThread(boost::ref(a((,一切似乎都运行良好。提前谢谢。

boost::thread复制参数并将副本传递给线程函数或函数对象的operator()

如果需要传递引用,请像现在一样使用boost::ref