Rob*_*ner 8 c++ boost boost-thread
在Boost库1.50.0版的发行说明中,我注意到两个重大变化(见这里):
#6266断开变化:如果可连接,线程析构函数应该调用terminate.
#6269中断更改:线程移动分配应该在可连接时调用terminate.
这对我目前使用Boost 1.49.0的现有项目意味着什么?我需要改变什么吗?如果是的话,我该怎么做才能完全改变?如果我忘记修改我现有的一个项目会怎样?我是否会遇到编译时错误(我希望如此)或者我会遇到令人讨厌且难以发现的运行时问题(我绝对不希望如此)?
当它说"突破变化"时,它意味着,"如果你依赖于先前X的行为,你的程序就会被打破,但现在是Y".
对于给定的两个更改,这意味着如果您依赖析构函数或移动赋值调用join()(或detach()),我认为这是以前的行为,您的程序现在必须明确地join()或detach()或与您的朋友见面std::terminate().这不是一个编译时错误,但也不是不可预测的运行时行为 - 你会得到一个很好的干净崩溃导致回到boost::thread析构函数,这是导致问题的原因.
以下代码用于正常工作,但是对于v3,程序将因为保留t范围而中止,因为thread::~thread调用std::terminate而不是从线程中静默分离:
#include <boost/thread.hpp>
#include <iostream>
void f()
{}
int main()
{
{
boost::thread t(f);
}
std::cout << "exiting gracefully" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
339 次 |
| 最近记录: |