Apparemment, GetThreadId est une API Vista. Comment puis-je obtenir l'identifiant d'un thread sur les systèmes Pre Vista?GetThreadId sur les systèmes pré-Vista?
Répondre
Il y a quelques options:
- Lorsque vous appelez CreateThread, vous obtenez la poignée. Vous pouvez appeler le GetCurrentThreadId pour obtenir l'ID du fil actuel.
- Vous pouvez utiliser Thread32First/Thread32Next pour énumérer des threads.
Si vous pouvez créer le thread en question, appelez GetCurrentThreadId et stockez-le quelque part, vous pouvez lire le résultat.
Cela a fonctionné le mieux pour moi, il suffit de l'appeler pour le créer et le stocker avec threadhandle! merci –
Si le thread en question entre fréquemment dans un état d'attente d'alerte, vous pouvez lui envoyer un APC avec QueueUserAPC; le gestionnaire APC peut alors appeler GetCurrentThreadId et communiquer le résultat à l'appelant en utilisant la méthode que vous voulez.
Vous pouvez également le faire avec des fonctions NT non documentées. L'utilisation de NtQueryInformationThread() sur la classe ThreadBasicInformation vous donnera l'ID de thread dans le returned structure. Un exemple peut être trouvé dans le wine source. Cependant, je ne suis pas certain de la version des fenêtres disponibles. Gardez à l'esprit que ces fonctions non documentées peuvent changer à tout moment. Il est donc préférable de les tester sur les anciennes versions de Windows qui vous intéressent et d'utiliser simplement GetThreadId() où c'est disponible. Notez que ces fonctions non documentées peuvent uniquement être accédées par LoadLibrary() et GetProcAddress() sur NTDLL;
ils n'ont pas de bibliothèque d'importation. According to MSDN, les déclarations pour les structures de données peuvent être trouvées dans Winternl.h
, mais si ce n'est pas le cas, il suffit de les définir en vous basant sur les liens ntinternals ci-dessus.
Celui qui s'intéresse ici est comment on peut appeler 'NtQueryInformationThread': http://www.snip2code.com/Snippet/85443/GetProcessIdOfThread()-on-Windows-XP – c00000fd
- 1. Construction identique sur différents systèmes
- 2. Obtention automatique des traces de pile sur les systèmes Unix
- 3. Dépendances de DLL - différentes sur différents systèmes?
- 4. Diffusion UDP sur des systèmes multi-hôtes
- 5. Synchroniser le GAC sur plusieurs systèmes
- 6. Utilisation de C++ dans les systèmes embarqués
- 7. Interface native avec les systèmes de tickets
- 8. Pourquoi les formats DateTime.Now.Date diffèrent-ils entre les systèmes?
- 9. WCF et systèmes embarqués
- 10. Systèmes distribués, meilleur cadre?
- 11. suggestions sur un projet en C++/systèmes/réseaux distribués
- 12. Dépôt de fichiers virtuels drop sur Linux Systèmes d'exploitation
- 13. Python et différents systèmes d'exploitation
- 14. Réception de diffusions UDP sur des systèmes multi-hôtes
- 15. Introduction aux systèmes d'algèbre informatique?
- 16. Comment les systèmes de blog font-ils cela?
- 17. Comment créez-vous votre propre nom (protocole URL) sur les systèmes Windows?
- 18. Segmentation de la mémoire sur les systèmes d'exploitation modernes: pourquoi avez-vous besoin de 4 segments?
- 19. Migration vers des systèmes ouverts
- 20. Temps de planification type dans les systèmes d'exploitation modernes
- 21. Meilleures pratiques pour patcher les systèmes Java d'entreprise?
- 22. Systèmes métriques de codes disponibles?
- 23. Communication inter-processus entre langages/systèmes d'exploitation
- 24. Comment intégrer au mieux plusieurs systèmes?
- 25. configuration de sauvegarde des systèmes Master Hudson
- 26. expressions régulières et de multiples systèmes d'écriture
- 27. À quel point les systèmes d'exploitation essaient-ils de minimiser les vidages TLB?
- 28. Application iPhone en mode paysage, systèmes 2008
- 29. Comment faire pour synchroniser netbeans config/plugin/mises à jour sur plusieurs systèmes?
- 30. Y a-t-il des systèmes de commentaires sur le site Web disponibles (comme phpbb pour les forums)?
dans le cas d'énumération, est-il un moyen de déterminer lequel des threads énumérés correspond à un HANDLE que vous avez? – bdonlan
Vous transmettez votre handle de processus en cours à CreateToolhelp32Snapshot avec l'indicateur TH32CS_SNAPMODULE. Cela va simplement énumérer les threads dans votre processus. –
Mais il ne vous laissera pas faire la différence entre les threads _within_ votre module, n'est-ce pas? – bdonlan