C++ Boost线程在超出范围时似乎会阻塞

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();

我对Boost1.54线程有一个奇怪的问题,当线程对象超出范围时,它似乎会阻塞

背景:我正在开发一个通过API调用使用外部硬件的实时应用程序。其中一些API调用会一直阻塞到执行。这就是为什么我想在单独的线程中调用它们,以避免阻塞我的主线程。简化结构如下所示:

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。是的,这很好地解释了这种行为。