在Boost.Thread 3.0.0重大更改(Breaking changes in Boost.

2019-06-26 03:29发布

在Boost库的1.50.0版本发行说明我注意到有两个重大的变动( 见这里 ):

#6266最新变化:螺纹析构函数应该调用终止,如果可连接。

#6269最新变化:螺纹移动分配应该叫终止,如果可连接。

这是什么意思为目前使用Boost 1.49.0我现有的项目? 我一定要改变什么? 如果是的话,我必须明确的改变? 会发生什么,如果我忘记修改我现有的项目之一? 我会得到编译时错误(我希望如此),或者我会变得肮脏和难以找到运行时的问题(我绝对不希望如此)?

Answer 1:

当它说:“重大更改”,这意味着,“如果你依赖于行为,这是以前X你计划被打破,但现在是Y”。

对于给定的两个变化,这意味着如果你依赖析构函数或移动分配调用join() (或detach()我相信是以前的行为,你的程序现在必须明确地join()detach()或满足你的朋友std::terminate() 这不是一个编译时错误,但也不是不可预测的运行时间behaviour-你会得到一个干净的崩溃导致右后卫boost::thread的析构函数,这是问题的原因。



Answer 2:

使用下面的代码才能正常工作,但与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;
} 


文章来源: Breaking changes in Boost.Thread 3.0.0