2011-02-25 3 views
0

J'essaie d'obtenir l'utilisation du processeur de chacun des threads (jusqu'à 200) dans mon application (Delphi XE). Pour préparer cela, je passe à PdhExpandWildCardPath une chaîne '\Thread(myappname/*)\% Processor Time'. Cependant (sur Win7/64) le tampon retourné par cette fonction retourne une chaîne pour chaque thread en cours d'exécution dans le système, en d'autres termes il semble avoir traité l'entrée comme si elle était '\Thread(*/*)\% Processor Time'. C'était inattendu. La même chose se produit lorsque je développe par la suite une chaîne pour obtenir 'ID Thread'.PdhExpandWildCardPath renvoie trop de chemins

De toute évidence, je peux filtrer les chaînes résultantes sur le nom de l'application et ajouter uniquement les compteurs dont j'ai besoin, mais cela nécessite plusieurs centaines d'analyses de sous-chaînes. Ai-je mal interprété le fonctionnement des caractères génériques?

+0

Ne serait-il pas plus simple d'énumérer les threads dans votre propre processus et de construire les noms de cette façon? –

+0

Pourquoi n'utilisez-vous pas simplement GetThreadTimes pour chacun de vos threads? – Misha

+0

@David: paresse, j'avais déjà fait le code wild-card. Mais merci, j'ai maintenant changé mon code pour énumérer les threads d'abord et c'est beaucoup plus rapide. Et je pense toujours que l'expansion de la wild-card est étrange. – frogb

Répondre

0

tard, mais je l'ai frappé le même mur, peut-être quelqu'un d'autre a besoin il:

Ici, il est: '\Thread(myappname*)\% Processor Time'

particulièrement utile avec ProcessNameFormat réglé sur 2 et ThreadNameFormat réglé sur 2 dans 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PerfProc\Performance'

Pour ProcessNameFormat = 2 ->link, il en va de même pour ThreadNameFormat, même si je n'ai trouvé aucun type de documentation.

+0

Trop tard pour moi, mais merci d'avance pour quand j'en aurai besoin! – frogb

Questions connexes