C++ Boost线程在超出范围时似乎会阻塞
我对Boost1.54线程有一个奇怪的问题,当线程对象超出范围时,它似乎会阻塞 背景:我正在开发一个通过API调用使用外部硬件的实时应用程序。其中一些API调用会一直阻塞到执行。这就是为什么我想在单独的线程中调用它们,以避免阻塞我的主线程。简化结构如下所示:C++ Boost线程在超出范围时似乎会阻塞,c++,multithreading,boost,C++,Multithreading,Boost,我对Boost1.54线程有一个奇怪的问题,当线程对象超出范围时,它似乎会阻塞 背景:我正在开发一个通过API调用使用外部硬件的实时应用程序。其中一些API调用会一直阻塞到执行。这就是为什么我想在单独的线程中调用它们,以避免阻塞我的主线程。简化结构如下所示: void some_func(){ //t2 boost::thread t(&blocking_call); //t3 } int main(){ //t1 some_func();
void some_func(){
//t2
boost::thread t(&blocking_call);
//t3
}
int main(){
//t1
some_func();
//t4
return 0;
}
幸运的是,外部硬件有一个板载时钟,因此我能够精确地计算程序的执行时间
我观察到:t1、t2和t3——正如预期的那样——只增加了一点点,但t4总是在API调用的执行时间之后不久,而API调用的执行时间要晚很多(不幸的是,对我来说甚至太迟了)。线程对象似乎在超出范围时调用了join(),尽管我认为它应该分离并完成它的工作
有什么提示吗?可能是什么问题 哪个
Boost
版本?最近他们。尝试手动调用:t.detach()代码>1.54,我在上面添加了它。我想知道boost::thread
是否会自动尝试为未连接的线程加入到它的析构函数中。@g-makulik请参见@IgorR。是的,这很好地解释了这种行为。