7

驚いたことに、C++11 の std::thread オブジェクトの実行は終了したが、まだ結合されていない場合でも、アクティブな実行スレッドと見なされます。これは、次のコード例 (g++ 4.7.3 を使用する Xubuntu 13.03 で構築) に示されています。C++11 標準が std::thread オブジェクトがまだアクティブにコードを実行しているかどうかを検出する手段を提供しているかどうかを知っている人はいますか?

#include <thread>
#include <chrono>
#include <iostream>
#include <pthread.h>
#include <functional>
int main() {
    auto lambdaThread = std::thread([](){std::cout<<"Excuting lambda thread"<<std::endl;});
    std::this_thread::sleep_for(std::chrono::milliseconds(250));
    if(lambdaThread.joinable()) {
        std::cout<<"Lambda thread has exited but is still joinable"<<std::endl;
        lambdaThread.join();
    }
    return 0;
}
4

2 に答える 2

2

「アクティブに実行されているコード」の定義は何ですか? 私が知っているわけではありませんが、スレッドが結合可能になった後にスレッドがどのような状態になるかはわかりません。ほとんどの場合、そのスレッドで実行されているコードによって設定されたフラグのように、実際には細かい制御が必要だと思います、 とりあえず

プラットフォーム固有のソリューションの場合、GetThreadTimes を使用できます

于 2013-08-05T17:41:47.463 に答える