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