/ / Závodný stav s počítadlami výkonu pre aktuálny proces - c ++, okná, performancecounter, pdh

Podmienka preteku s čítačmi výkonnosti pre aktuálny proces - c ++, Windows, performancecounter, pdh

Snažím sa obísť staré "Ako získam počítadlo výkonu systému Windows pre aktuálny procesV podstate som enumerovanie inštancií Object Process získať zoznam objektov procesu, ktoré potom môžem dotazovať na ich proces id a porovnať ich s mojimi vlastnými.

Na základe toho môžem vytvoriť cestu počítadla výkonu pomocou správneho indexu inštancie (na vytvorenie niečoho podobného Process(my_program#3)<counter>), ktoré potom môžem použiť na dotazovanie akéhokoľvek pultu, o ktorý ma zaujíma. Čo sa však stane, ak jeden alebo viac prípadov inštancie my_program skončí pred PdhAddCounter zavolať? Ak by som to správne pochopil, znamenalo by to, že moja protiprúdová cesta teraz odkazuje na iný proces alebo je teraz neplatná. Môžu dokonca zmiznúť počas dotazovania na id procesu ...

Ako zabránim tomu, aby sa čítacia cesta stala neplatnou predtým, ako ju môžem použiť na získanie čítačky?

odpovede:

0 pre odpoveď č. 1

Wow, máš pravdu. Zdá sa mi to ako hlavná chyba dizajnu. V podstate nie je možné spoľahlivo monitorovať inštanciu, ak nie je jej meno jedinečné riešením konkrétne pre objekty Process a Thread, ale to je globálne nastavenie, ktoré by mohlo ovplyvniť iné aplikácie.

Myslím si, že najbezpečnejší spôsob, ako to urobiť, by bolo sledovať všetky procesné objekty a zakaždým, keď zbierate údaje, prejsť a nájsť ten s požadovaným Id procesu.