Thread View: be.comp.programming
6 messages
6 total messages
Started by bomberboy
Wed, 19 Nov 2003 22:21
[C/C++] CPU usage meten, WinXP
Author: bomberboy
Date: Wed, 19 Nov 2003 22:21
Date: Wed, 19 Nov 2003 22:21
46 lines
2975 bytes
2975 bytes
Hallo, Ik ben op zoek naar een, bij voorkeur eenvoudige, manier om de CPU-usage te meten. Het doelplatform is een TabletPC met winXP Tablet Edition. Dus ik vermoed dat de oplossing voor WinXP of Win2k ook zal werken. In win9* kan dit gewoon gelezen worden in een registry-key, maar dat is niet zo in 2k en XP. Vanaf Win2k is er wel de pdh-api beschikbaar (Performance Data Helper) maar ik ben er niet echt happig op om deze te gebruiken. Immers: - Als compiler gebruik ik MinGW en deze heeft geen pdh-header beschikbaar en ik ben persoonlijk niet echt van van de Visual* omgevingen. Maar indien nodig zet ik mij daar wel overheen :) - Een tweede reden is dat aan deze pdh je performance-counter objecten moet toevoegen, maar blijkbaar zijn de namen van deze objecten vertaald naar de taal van het OS. Een imho niet zo denderende beslissing van de MS-programmeurs. - Heel die pdh structuur lijkt me nogal zwaar voor wat ik wil doen (enkel cpu-usage) Het zou ideaal zijn indien dit alles in ��n enkele methode-oproep kan samengebald worden. Het uiteindelijke doel is immers dat deze methode dan via JNI in een java-klasse kan opgeroepen worden. Voorlopig ben ik nog niet tot een oplossing gekomen die aan deze eisen kan voldoen. Er blijkt immers geen rechtstreekse methode native methode te zijn om dit op te vragen. Een oplossing waar ik ook al aan gedacht had was hiervoor het idle-proces te (mis)(ge)bruiken en via een getProcessTimes-achtige methode de tijd ervan op te vragen en hieruit dan het echte gebruik af te leiden. Het probleem is dat hiervoor een extra thread nodig is om om de x-aantal tijdseenheden dan die tijden opvraagt, vergelijkt met de vorige tijd enz. Maar die extra thread zou ik eigenlijk graag vermijden. Hoewel dat waarschijnlijk niet zal mogelijk zijn. Iemand die enkele tips heeft? Bedankt. -- Bruno Politicians do it to everyone.
Re: [C/C++] CPU usage meten, WinXP
Author: Pieter Philippaerts
Date: Wed, 19 Nov 2003 23:20
Date: Wed, 19 Nov 2003 23:20
26 lines
2380 bytes
2380 bytes
"bomberboy" <newsbomber@pandora.invalid> wrote in message > In win9* kan dit gewoon gelezen worden in een registry-key, maar dat is > niet zo in 2k en XP. > Vanaf Win2k is er wel de pdh-api beschikbaar (Performance Data Helper) > maar ik ben er niet echt happig op om deze te gebruiken. > Immers: > Het zou ideaal zijn indien dit alles in ��n enkele methode-oproep kan > samengebald worden. Het uiteindelijke doel is immers dat deze methode dan > via JNI in een java-klasse kan opgeroepen worden. Op NT4 en hoger kan je de undocumented API functie NtQuerySystemInformation gebruiken [http://www.codeproject.com/system/cpuusage.asp]. Op Windows 9x/ME is er naar ��n methode om de CPU time op te vragen, en dat is via de registry. Je gaat dus een aparte implementatie moeten maken voor NT en 9x/ME, maar dmv. OO ga je dat wel mooi kunnen oplossen. > Een oplossing waar ik ook al aan gedacht had was hiervoor het idle-proces > te (mis)(ge)bruiken en via een getProcessTimes-achtige methode de tijd > ervan op te vragen en hieruit dan het echte gebruik af te leiden. Lukt dat? Ik heb het niet getest, maar ik vermoed dat als je GetProcessTimes oproept met 0 als PID, dat die een error gaat teruggeven. Mvg, Pieter Philippaerts
Re: [C/C++] CPU usage meten, WinXP
Author: Luc Kumps
Date: Thu, 20 Nov 2003 08:07
Date: Thu, 20 Nov 2003 08:07
20 lines
1776 bytes
1776 bytes
bomberboy wrote: > Hallo, > > Ik ben op zoek naar een, bij voorkeur eenvoudige, manier om de > CPU-usage te meten. Het doelplatform is een TabletPC met winXP > Tablet Edition. Dus ik vermoed dat de oplossing voor WinXP of Win2k > ook zal werken. > > In win9* kan dit gewoon gelezen worden in een registry-key, maar dat > is niet zo in 2k en XP. > Vanaf Win2k is er wel de pdh-api beschikbaar (Performance Data Helper) > maar ik ben er niet echt happig op om deze te gebruiken. GetSystemTimes() is waar je naar zoekt, denk ik. Als het ook op Win2K moet werken: heb je al eens naar NtQuerySystemInformation gekeken? (met SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION) Luc K
Re: [C/C++] CPU usage meten, WinXP
Author: SLE
Date: Thu, 20 Nov 2003 12:40
Date: Thu, 20 Nov 2003 12:40
13 lines
1532 bytes
1532 bytes
"bomberboy" <newsbomber@pandora.invalid> wrote > > Ik ben op zoek naar een, bij voorkeur eenvoudige, manier om de CPU-usage > te meten. Het doelplatform is een TabletPC met winXP Tablet Edition. Dus > ik vermoed dat de oplossing voor WinXP of Win2k ook zal werken. > Naast de reeds gesuggereerde oplossingen, zou je ook via WMI de LoadPercentage property van de Win32_Processor instantie(s) ophalen. -- SLE
Re: [C/C++] CPU usage meten, WinXP
Author: bomberboy
Date: Thu, 20 Nov 2003 23:36
Date: Thu, 20 Nov 2003 23:36
53 lines
3481 bytes
3481 bytes
Pieter Philippaerts schreef: > "bomberboy" <newsbomber@pandora.invalid> wrote in message >> In win9* kan dit gewoon gelezen worden in een registry-key, maar dat is >> niet zo in 2k en XP. >> Vanaf Win2k is er wel de pdh-api beschikbaar (Performance Data Helper) >> maar ik ben er niet echt happig op om deze te gebruiken. >> Immers: >> Het zou ideaal zijn indien dit alles in ��n enkele methode-oproep kan >> samengebald worden. Het uiteindelijke doel is immers dat deze methode dan >> via JNI in een java-klasse kan opgeroepen worden. > > Op NT4 en hoger kan je de undocumented API functie NtQuerySystemInformation > gebruiken [http://www.codeproject.com/system/cpuusage.asp]. Op Windows 9x/ME > is er naar ��n methode om de CPU time op te vragen, en dat is via de > registry. > Je gaat dus een aparte implementatie moeten maken voor NT en 9x/ME, maar > dmv. OO ga je dat wel mooi kunnen oplossen. Voorlopig is het doelsysteem er eentje met Windows XP Tablet Edition, dus die 9x/Me oplossing is niet echt een prioriteit. Het is trouwens de bedoeling dat het in een OSGi-bundle gebruikt wordt, en je kan hierbij in de Manifest file specifi�ren welke native libraries vor welk OS moeten geladen worden. Dus het ondersteunen van meerdere systemen is vrij eenvoudig. >> Een oplossing waar ik ook al aan gedacht had was hiervoor het idle-proces >> te (mis)(ge)bruiken en via een getProcessTimes-achtige methode de tijd >> ervan op te vragen en hieruit dan het echte gebruik af te leiden. > > Lukt dat? Ik heb het niet getest, maar ik vermoed dat als je GetProcessTimes > oproept met 0 als PID, dat die een error gaat teruggeven. Het lukt dus inderdaad niet om dit zo te doen :-/ De oplossing met NtQuerySystemInformation, getSystemTimes() en WMI door jou Luc en SLE voorgesteld zulen me waarschijnlijk wel al een heel stuk op weg helpen. Het probleem is voorlopig dat MinGW hier (nog) niet mee om kan. Ik zal dus bij mijn thesisbegeleider moeten gaan zagen voor Visual C++ en/of proberen of de versies in de PC-klassen niet te verouderd zijn. (Valt het op dat ik tot nu toe vooral onder unix-achtigen geprogrammeerd heb?) Bedankt, ik weet weer wat proberen, en als het lukt laat ik nog wel weten hoe, of als ik nog problemen heb kom ik ook nog wel terug ;-) -- Bruno F u cn rd ths u cnt spl wrth a dm!
Re: [C/C++] CPU usage meten, WinXP
Author: bomberboy
Date: Sun, 30 Nov 2003 19:39
Date: Sun, 30 Nov 2003 19:39
23 lines
1971 bytes
1971 bytes
bomberboy schreef: > Bedankt, ik weet weer wat proberen, en als het lukt laat ik nog wel weten > hoe, of als ik nog problemen heb kom ik ook nog wel terug ;-) Zoals ik dus beloofd had: Na nog wat meer gegoogle op de hier vermelde mogelijkheden ben ik hier terechtgekomen http://groups.google.be/groups?q=ntquerysysteminformation+cpu&hl=nl&lr=&ie=UTF-8&selm=06cfac23.94f342db%40usw-ex0105-037.remarq.com&rnum=4 Dit heb ik dan wat aangepast, en van mijn Java-CPU object een kleine thread gemaakt die dit om de x tijd gaat aanroepen om zijn interne usage-double te gaan updaten. Misschien dat ik later mij nog eens ga verdiepen in een WMI oplossing, maar voorlopig is dit voldoende. Bedankt voor de suggesties. -- Bruno Chaste makes waste.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads