8

現在のスレッドがメインスレッドであるかどうかを検出するための c++11 の信頼できる方法はありますか? または、メイン スレッドのスレッド ID を手動で保存してからstd::this_thread::get_id()、次のようなルーチンを作成する必要があります。

bool isMainThread()
{
    return theMainThreadIdISavedOnProgramStart == std::this_thread::get_id();
}

これを行う一般的な方法はありますか?上記の解決策は機能しますか?

ありがとう

4

1 に答える 1

11

メインスレッドとはどういう意味ですか? つまり、 を実行するスレッドのmain()場合、そのスレッドがメイン スレッドであるかどうかを知る方法はありません。その ID を保存する必要があり、後で保存された ID を使用して、そのID を保存された ID と比較することで、現在のスレッドがメイン スレッドであるかどうかを知ることができます (質問で推測したように)。

もう少し説明すると、スレッドには階層がなく、1 つのスレッドが他のスレッドを作成したとしても、親スレッドも子スレッドもありません。OS は、どのスレッドがどのスレッドを作成したかを覚えていません。したがって、すべてのスレッドは OS とプログラムにとって同じです。mainそのため、現在のスレッドがアプリケーション内の他のすべてのスレッドの親であるかどうかを検出して、スレッドを推測することはできません。

于 2012-07-13T11:21:49.820 に答える