78 votes

Std::thread - nommer votre thread

Le nouveau C++ a ce type std::thread. Fonctionne comme un charme. Maintenant, j'aimerais donner un nom à chaque fil pour un débogage plus facile (comme le permet Java). Avec les pthreads, je ferais :

pthread_setname_np(pthread_self(), "nom_du_fil");

mais comment puis-je faire cela avec c++0x ? Je sais qu'il utilise les pthreads en dessous sur les systèmes Linux, mais j'aimerais rendre mon application portable. Est-ce possible du tout ?

1 votes

Sur Windows, le nom du thread est une propriété du débogueur (c'est-à-dire suivie en dehors de l'application elle-même). En conséquence, vous n'avez pas l'équivalent de pthread_getname_np

4 votes

Depuis Windows 10, 1607, il y a SetThreadDescription.

0voto

Dans le fichier d'en-tête fais :

const std::string & ThreadName(const std::string name="");

Dans le fichier source fais :

const std::string & ThreadName(const std::string name)
{
    static std::atomic_int threadCount{0};
    const thread_local std::string _name = name + std::to_string(threadCount.fetch_add(1));
    return _name; 
}

Utilisation :

void myThread()
{
   ThreadName("myThread"); // Appeler une fois au tout début de la création de votre thread
   ...
   std::cout << ThreadName() << std::endl; // N'importe où dans votre code
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X