| Autor |
Nachricht |
joomoo
Autor
Benutzerprofil
Anmeldungsdatum: 31.07.2004
Beiträge: 1520
|
joomoo Autor
17:11:12 21.09.2004 Titel: |
CPU Auslastung auslesen |
Zitieren |
Wenn ich bei XP STRG+ALT+ENTF drücke, kann ich ja die CPU Auslastung, in Prozent anschauen. Ich möchte gern ein Programm schreiben was einem diesen Wert anzeigt. Wie geht das? Was ist die CPU Auslastung überhaupt? Ist es auch möglich die CPU Auslastung einzelner Prozesse anzuzeigen? |
|
|
|
 |
Werbeunterbrechung
|
|
 |
flenders
Moderator
Benutzerprofil
Anmeldungsdatum: 04.07.2002
Beiträge: 9235
|
flenders Moderator
18:22:14 21.09.2004 Titel: |
|
Zitieren |
Kannst du dir über GetProcessTimes ausrechnen |
_________________ ( Moderator im Webzeugs- und WinAPI-Forum )
|
|
 |
joomoo
Autor
Benutzerprofil
Anmeldungsdatum: 31.07.2004
Beiträge: 1520
|
joomoo Autor
21:32:28 21.09.2004 Titel: |
|
Zitieren |
Huh. Das klinkt mir kompliziert. Gibt es auch ein Beispiel für Dev-C++? Die Beispiele die ich bis jetzt gesehen habe waren alle für diese .NET sachen. |
|
|
|
 |
flenders
Moderator
Benutzerprofil
Anmeldungsdatum: 04.07.2002
Beiträge: 9235
|
flenders Moderator
22:48:24 21.09.2004 Titel: |
|
Zitieren |
Ist eigentlich nicht allzu kompliziert:
Einfach GetProccesTimes mehrmals aufrufen, dann teilst du die Zeitdifferenz der beiden Aufrufe durch die dazwischen vergangene Zeit - und schon hast du die Auslastung |
_________________ ( Moderator im Webzeugs- und WinAPI-Forum )
Zuletzt bearbeitet von flenders am 22:55:04 21.09.2004, insgesamt 2-mal bearbeitet |
|
 |
joomoo
Autor
Benutzerprofil
Anmeldungsdatum: 31.07.2004
Beiträge: 1520
|
joomoo Autor
17:50:29 23.09.2004 Titel: |
|
Zitieren |
Gut. Aber was muss ich als Parameter eintragen? Und wie kann ich die Zeit, zwischen den Aufrufen messen? Millisekunden genau reicht doch nicht oder? |
|
|
|
 |
flenders
Moderator
Benutzerprofil
Anmeldungsdatum: 04.07.2002
Beiträge: 9235
|
flenders Moderator
17:56:44 23.09.2004 Titel: |
|
Zitieren |
Wo ist dein Problem mit den Parametern? Der erste ist das Prozess-Handle, und dann eben 4 Pointer auf FILETIME-Strukturen.
Zur Messung der Zeitdifferenz: Wieso sollten Millisekunden nicht genau genug sein?! Du misst einfach die Zeit im Aktualisierungsintervall - z.B. 1 Sekunde o.ä. |
_________________ ( Moderator im Webzeugs- und WinAPI-Forum )
|
|
 |
joomoo
Autor
Benutzerprofil
Anmeldungsdatum: 31.07.2004
Beiträge: 1520
|
joomoo Autor
20:57:06 23.09.2004 Titel: |
|
Zitieren |
Das versteh ich alles nicht. Wenn es so einfach ist, könntest du mir nicht dann den fertigen Code geben? bitte! |
|
|
|
 |
MiC++ha
Mitglied
Benutzerprofil
Anmeldungsdatum: 06.09.2004
Beiträge: 395
|
MiC++ha Mitglied
13:56:33 24.09.2004 Titel: |
Re: CPU Auslastung auslesen |
Zitieren |
| joomoo schrieb: | | ..... Ich möchte gern ein Programm schreiben was einem ..... |
| joomoo schrieb: | | Das versteh ich alles nicht. Wenn es so einfach ist, könntest du mir nicht dann den fertigen Code geben? bitte! |
Was nun schreiben" oder "basteln"? (Copy´n Paste)
Ich denke mal du kommst mit der 64Bit Struktur (2 x 32Bit) nicht klar, oder weißt du nicht wie man eine Differenz in Prozent rechnet?
Du kannst auch mit "FileTimeToSystemTime(const FILETIME* lpFileTime, LPSYSTEMTIME lpSystemTime);"
das in SystemTime umwandeln, vieleicht kommst du damit besser klar. |
_________________ Fragt Floppy den HDD, warum bist du größer? Da sagt HDD: weil ich Hard bin und Du nur nen Flop
|
|
 |
flenders
Moderator
Benutzerprofil
Anmeldungsdatum: 04.07.2002
Beiträge: 9235
|
flenders Moderator
14:50:31 24.09.2004 Titel: |
|
Zitieren |
Ich habe mal was zusammengebastelt. Genieße es aber mit Vorsicht - habe schon lang nichts mehr gecodet:
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | double GetCPULoad()
{
static DWORD dwLastProcessTime = 0;
static DWORD dwLastSystemTime = 0;
static double dCPULoad = 0;
FILETIME ftCreationTime, ftExitTime, ftKernelTime, ftUserTime;
GetProcessTimes(GetCurrentProcess(),&ftCreationTime,&ftExitTime,&ftKernelTime,&ftUserTime);
ULARGE_INTEGER uiKernelTime, uiUserTime;
uiKernelTime.HighPart = ftKernelTime.dwHighDateTime;
uiKernelTime.LowPart = ftKernelTime.dwLowDateTime;
uiUserTime.HighPart = ftUserTime.dwHighDateTime;
uiUserTime.LowPart = ftUserTime.dwLowDateTime;
DWORD dwActualProcessTime = (DWORD)((uiKernelTime.QuadPart + uiUserTime.QuadPart)/100);
DWORD dwActualSystemTime = GetTickCount();
if(dwLastSystemTime) {
dCPULoad = (double)(dwActualProcessTime-dwLastProcessTime)/(dwActualSystemTime-dwLastSystemTime);
}
dwLastProcessTime = dwActualProcessTime;
dwLastSystemTime = dwActualSystemTime;
return dCPULoad;
} | |
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | double GetCPULoad()
{
static DWORD dwLastProcessTime = 0;
static DWORD dwLastSystemTime = 0;
static double dCPULoad = 0;
FILETIME ftCreationTime, ftExitTime, ftKernelTime, ftUserTime;
GetProcessTimes(GetCurrentProcess(),&ftCreationTime,&ftExitTime,&ftKernelTime,&ftUserTime);
ULARGE_INTEGER uiKernelTime, uiUserTime;
uiKernelTime.HighPart = ftKernelTime.dwHighDateTime;
uiKernelTime.LowPart = ftKernelTime.dwLowDateTime;
uiUserTime.HighPart = ftUserTime.dwHighDateTime;
uiUserTime.LowPart = ftUserTime.dwLowDateTime;
DWORD dwActualProcessTime = (DWORD)((uiKernelTime.QuadPart + uiUserTime.QuadPart)/100);
DWORD dwActualSystemTime = GetTickCount();
if(dwLastSystemTime) {
dCPULoad = (double)(dwActualProcessTime-dwLastProcessTime)/(dwActualSystemTime-dwLastSystemTime);
}
dwLastProcessTime = dwActualProcessTime;
dwLastSystemTime = dwActualSystemTime;
return dCPULoad;
} | |
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | double GetCPULoad()
{
static DWORD dwLastProcessTime = 0;
static DWORD dwLastSystemTime = 0;
static double dCPULoad = 0;
FILETIME ftCreationTime, ftExitTime, ftKernelTime, ftUserTime;
GetProcessTimes(GetCurrentProcess(),&ftCreationTime,&ftExitTime,&ftKernelTime,&ftUserTime);
ULARGE_INTEGER uiKernelTime, uiUserTime;
uiKernelTime.HighPart = ftKernelTime.dwHighDateTime;
uiKernelTime.LowPart = ftKernelTime.dwLowDateTime;
uiUserTime.HighPart = ftUserTime.dwHighDateTime;
uiUserTime.LowPart = ftUserTime.dwLowDateTime;
DWORD dwActualProcessTime = (DWORD)((uiKernelTime.QuadPart + uiUserTime.QuadPart)/100);
DWORD dwActualSystemTime = GetTickCount();
if(dwLastSystemTime) {
dCPULoad = (double)(dwActualProcessTime-dwLastProcessTime)/(dwActualSystemTime-dwLastSystemTime);
}
dwLastProcessTime = dwActualProcessTime;
dwLastSystemTime = dwActualSystemTime;
return dCPULoad;
} | |
Zur Initialisierung musst du die Funktion erst einmal so aufrufen |
_________________ ( Moderator im Webzeugs- und WinAPI-Forum )
|
|
 |
MiC++ha
Mitglied
Benutzerprofil
Anmeldungsdatum: 06.09.2004
Beiträge: 395
|
MiC++ha Mitglied
15:33:37 24.09.2004 Titel: |
|
Zitieren |
Kleiner Hinweis noch,
dies funktioniert nicht bei Windows 9x |
_________________ Fragt Floppy den HDD, warum bist du größer? Da sagt HDD: weil ich Hard bin und Du nur nen Flop
|
|
 |