0

我对 Boost 1.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 调用的执行时间之后不久,这要晚很多(不幸的是,对我来说甚至为时已晚)。似乎线程对象在超出范围时正在调用 join(),尽管我认为它应该只是分离并完成其工作。

任何提示可能是什么问题?

4

0 回答 0