C ++ 11 ‘native_handle’ n’est pas membre de ‘std :: this_thread’

Dans l’extrait de code suivant,

void foo() { std::this_thread::native_handle().... //error here } int main() { std::thread t1(foo); t1.join(); return 0; } 

Comment obtenez-vous le native_handle de std::this_thread depuis la fonction foo ?

Il n’y a aucun moyen pour un thread d’accéder de manière autonome à son propre std::thread . C’est intentionnel puisque std::thread est un type de déplacement uniquement.

Je crois que ce que vous demandez, c’est un membre native_handle() de std::thread::id , et c’est une suggestion intéressante. Pour autant que je sache, ce n’est pas possible actuellement. Il serait utilisé comme:

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

Il ne serait pas garanti de fonctionner ou même d’exister. Cependant, j’imagine que la plupart des plateformes POSIX pourraient le prendre en charge.

Une façon d’essayer de changer la norme C ++ consiste à soumettre des problèmes. Voici comment s’y prendre.

C ++ 11 ne fournit pas de mécanisme pour obtenir les threads en cours native_handle. Vous devez utiliser des appels spécifiques à la plate-forme, par exemple GetCurrentThread () sous Windows:

 void foo() { auto native_me = ::GetCurrentThread(); } 

Comme Howard l’a souligné, cela n’est pas encore pris en charge dans ISO C ++.

Mais thread::id a un operator<< surchargé operator<< pour s’imprimer sur un ostream .

 #include  #include  int main() { std::cout << "Current thread ID: " << std::this_thread::get_id() << std::endl; } 

Sans connaître la sémantique de la valeur réelle (qui dépend fortement de la plate-forme), il est préférable de l'imprimer ou de l'utiliser comme clé dans une carte.