Je souhaite compter les threads natifs du processus Windows en cours via C/C++. Je vois qu'il y a un related question avec une réponse .NET, mais je ne peux pas utiliser cette solution. Je soupçonne qu'il peut y avoir une solution via PdhOpenQuery/PdhCollectQueryData mais je n'ai pas encore exploré cette direction, et j'espère qu'il y aura une approche plus facile. MISE À JOUR: J'aurais dû dire que mon implémentation actuelle utilise CreateToolhelp32Snapshot/Thread32First/Thread32Next et c'est ce que j'essaie de remplacer. Cette implémentation est lourde et provoque 20 000 fautes de page à chaque invocation dans mon processus. Peut-être que je l'utilise mal?Comment puis-je obtenir par programmation les nombres de threads pour un processus Windows?
Update2: La solution qui a fonctionné le mieux pour moi était de faire une chaîne comme "\ Process (_) \ Thread Count" avec le PID du processus qui m'intéressait. Puis j'ai appelé PdhExpandWildCardPath() pour développer le "" caractère générique. Puis j'ai appelé PdhOpenQuery(), PdhAddCounter() et PdhCollectQueryData() pour initialiser. Par la suite, j'ai appelé PdhCollectQueryData() et PdhGetFormattedCounterValue() pour obtenir mes valeurs périodiquement.
Merci, je viens de mettre à jour la question pour indiquer que votre solution est ce que j'utilise actuellement aujourd'hui, mais je cherche quelque chose de plus performant. Ou peut-être que je suis trop préoccupé par les conséquences de la panne de page de cette solution? –
@Chris - voir edit - Perfmon utilise généralement la mémoire partagée et cela devrait être rapide. –
@Chris - J'ai une idée de plus pour vous, en éditant cela maintenant –