9

「メイン」プログラムスレッドのIDを取得する方法はc ++にありますか?

std::this_thread::get_id()現在実行中のスレッドのIDを取得していることがわかりますがmain、元のプログラムスレッドのIDが必要です。これを取得する関数はありません。

その理由は、アプリケーションの元のスレッドでのみ呼び出す必要があるスレッドセーフでない内部関数がいくつかあるため、安全にするためにやりたいことです:-

assert(std::this_thread::get_id() == std::main_thread::get_id());

しかし、もちろんそれを行う機能はなく、その情報を取得する方法がわかりません。

4

2 に答える 2

18

this_thread元のスレッドのままで保存できます。

std::thread::id main_thread_id;

int main() {
    main_thread_id = std::this_thread::get_id(); // gotcha!
    /* go on */
}
于 2012-11-08T11:18:04.380 に答える
3

このトピックは、このトピックのように、ここでかなりの回数議論されているようです。

いくつかの解決策を見つけることができますが、私は逆のことを考えます...新しいスレッドを開始するときは、メインスレッドのIDをそれらに指定し、それを他のスレッドのフィールドに格納します。スレッドの存続期間を通じてそれが変わらない場合は、問題ありません。これらのハンドルで「メイン」スレッドを参照できます。

于 2012-11-08T11:20:14.343 に答える