17

次のコード スニペットでは、

void foo() {
  std::this_thread::native_handle().... //error here
}

int main() {
  std::thread t1(foo);

  t1.join();
  return 0;
}

関数内native_handleからfromを取得するにはどうすればよいですか?std::this_threadfoo

4

5 に答える 5

15

スレッドが自律的に独自の にアクセスする方法はありませんstd::threadstd::thread移動専用タイプなのでわざとです。

あなたが要求しているのは のnative_handle()メンバーだと思います。std::thread::idそれは興味深い提案です。私の知る限り、現時点では不可能です。次のように使用されます。

void foo()
{
    auto native_me = std::this_thread::get_id().native_handle();
    // ...
}

動作することは保証されず、存在することさえありません。ただし、ほとんどの POSIX プラットフォームでサポートできると思います。

C++ 標準を変更しようとする 1 つの方法は、Issue を送信することです。 手順は次のとおりです。

于 2013-04-28T03:33:45.433 に答える
8

C++11 には、現在のスレッドの native_handle を取得するメカニズムがありません。プラットフォーム固有の呼び出し、つまり Windows では GetCurrentThread() を使用する必要があります。

void foo()
{
    auto native_me = ::GetCurrentThread();
}
于 2014-10-07T13:33:01.847 に答える