2009-11-16 24 views

Répondre

2

Si ACE ne fournit pas une méthode pour le faire, vous devez déterminer son type. Étant donné que c'est ACE, il est probablement caché derrière 3 typedefs imbriqués dans 5 #defines. Le fichier d'en-tête OS_NS_Thread.h semble être un bon point de départ.

+0

Si '' ACE_thread_t' est comme pthread_t' il va bouillir jusqu'à un entier ("% d" ou "x%") ou un pointeur ("% p"). La justification ici est que ceux-ci sont (a) légers, et (b) uniques. Cela peut ne pas être le cas. Il est possible que ACE_thread_t soit un type complexe. Si c'est public, vous pouvez être en mesure d'obtenir la carte d'identité. Si ce n'est pas le cas, vous aurez besoin d'un appel API pour obtenir l'ID de thread réel. Soyez très prudent avec cela, car le type est probablement différent d'une plateforme à l'autre et il n'y a aucune garantie de portabilité. – quark

+0

+1 pour "derrière 3 typedefs imbriqués dans 5 #defines"! C'est le style ACE. – jfly

1

ACE? C++? Pourquoi ne pas utiliser iostream au lieu de printf?

ACE_thread_t id = ACE_OS::thr_self(); 
unsigned char content[sizeof(id)]; 
size_t i; 
memcpy(content, &id, sizeof(id)); 
for (i=0; i<sizeof(id); ++i) printf("%02X",content[i]); 
+0

Je ne comprends pas que vous l'avez utilisé memcpy et boucle ici? –