| Autor |
Nachricht |
joomoo
Autor
Benutzerprofil
Anmeldungsdatum: 31.07.2004
Beiträge: 1519
|
joomoo Autor
19:55:37 24.09.2004 Titel: |
|
Zitieren |
| flenders schrieb: | 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 :) | #
Er sagt
14 untitled1.cpp
`union _ULARGE_INTEGER' has no member named `HighPart'
Aber sonst keine Fehler. Wie kann ich dieses Problem umgehen? (ich hab dev-c++) |
|
|
|
 |
Werbeunterbrechung
|
|
 |
joomoo
Autor
Benutzerprofil
Anmeldungsdatum: 31.07.2004
Beiträge: 1519
|
joomoo Autor
20:00:59 24.09.2004 Titel: |
Re: CPU Auslastung auslesen |
Zitieren |
| MiC++ha schrieb: | | 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. |
Wenn du etwas nicht KANNST, dann kannst du es nicht einfach schreiben. Wenn dir jemand zeigt wies geht und du dirs kopierst, wirstes nicht checken, aber später sagste vielleicht: AHHH! Genau! Jetzt check ich det.
64Bit Struktur? Hä? Mit Prozent kann ich, hatten wir in der Schule. Mit dem FileTime komm ich nicht klar. Was soll ich mit der SystemTime??? Ich check gar nichts. |
|
|
|
 |
MiC++ha
Mitglied
Benutzerprofil
Anmeldungsdatum: 06.09.2004
Beiträge: 395
|
MiC++ha Mitglied
21:10:36 24.09.2004 Titel: |
|
Zitieren |
Also ich mach erst ein Führerschein bevor ich Auto fahre und guck mir das nicht vom Kumpel ab, denn dann bau ich garantiert ein Unfall!!!
Ich will damit sagen das du dich vieleicht erst mal kurz (wirklich kurz) mit
dieser Datenstruktur auseinandersetzt, sie ist im Prinzip einfach, auch wenn
es in der MSDN besch...eiden beschrieben ist und wenn du das dann mit Hi und Low Word und DWORD so wie die Struct von Filetime einigermassen weißt, ließt
sich der Code von flenders wie was Selbstgeschriebenes.
Nun kopierst du den Code und schon hast du einen Unfall (Fehlermeldung) und
weißt nicht warum.
ULARGE_INTEGER ist in winnt.h deklardiert und includen muß du windows.h (wirst du ja haben), da du devcpp verwendest kann es sein das du noch ne lib zu linken
muß mit -l***, aber er hat in jedem Fall nen Member namens DWORD HighPart. |
_________________ 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
21:15:04 24.09.2004 Titel: |
|
Zitieren |
|
 |
MiC++ha
Mitglied
Benutzerprofil
Anmeldungsdatum: 06.09.2004
Beiträge: 395
|
MiC++ha Mitglied
21:31:22 24.09.2004 Titel: |
|
Zitieren |
Nein ich habe es gerade beim devcpp getestet, er akzeptiert die obere Struct von der UNION, also liegt der Fehler woanders aber auch nur wenn er den gleichen Compiler und Linker verwendet wie ich.
Dev-C++: Mingw32 gcc |
_________________ Fragt Floppy den HDD, warum bist du größer? Da sagt HDD: weil ich Hard bin und Du nur nen Flop
|
|
 |
joomoo
Autor
Benutzerprofil
Anmeldungsdatum: 31.07.2004
Beiträge: 1519
|
joomoo Autor
22:24:06 24.09.2004 Titel: |
|
Zitieren |
Ich hab Dev-C++ 4 mit Mingw. Mit dem "u." klappts, allerdings zeigt er mir als CPU Auslastung immer 0 an. |
|
|
|
 |
MiC++ha
Mitglied
Benutzerprofil
Anmeldungsdatum: 06.09.2004
Beiträge: 395
|
MiC++ha Mitglied
00:19:31 25.09.2004 Titel: |
|
Zitieren |
| joomoo schrieb: | | Ich hab Dev-C++ 4 mit Mingw. Mit dem "u." klappts, allerdings zeigt er mir als CPU Auslastung immer 0 an. |
Ruff die Funktion nur ein mal pro Sekunde auf, was für ein Wert erhälst du dann? |
_________________ 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
07:45:10 25.09.2004 Titel: |
|
Zitieren |
Und du musst natürlich auch etwas machen, sonst ist die Auslastung ja nahezu bei 0 |
_________________ ( Moderator im Webzeugs- und WinAPI-Forum )
|
|
 |
joomoo
Autor
Benutzerprofil
Anmeldungsdatum: 31.07.2004
Beiträge: 1519
|
joomoo Autor
09:13:03 26.09.2004 Titel: |
|
Zitieren |
| flenders schrieb: | | Und du musst natürlich auch etwas machen, sonst ist die Auslastung ja nahezu bei 0 :o) |
Wenn ich daneben STRG+ALT+ENTF laufen lasse zeigt das mir aber 2-10% immer so an. |
|
|
|
 |
flenders
Moderator
Benutzerprofil
Anmeldungsdatum: 04.07.2002
Beiträge: 9235
|
flenders Moderator
11:07:05 26.09.2004 Titel: |
|
Zitieren |
Du rufst die Funktion aber schon mehrmals auf, oder? Naja, kann auch sein, dass mein Code fehlerhaft ist |
_________________ ( Moderator im Webzeugs- und WinAPI-Forum )
|
|
 |