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.