Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Advanced Developers Conference     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: FAQ - WinAPI ::  CPU Auslastung auslesen  
Gehen Sie zu Seite Zurück  1, 2, 3, 4  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
joomoo
Autor

Benutzerprofil
Anmeldungsdatum: 31.07.2004
Beiträge: 1519
Beitrag 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
Beitrag 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
Beitrag 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
Beitrag flenders Moderator 21:15:04 24.09.2004   Titel:              Zitieren

Evtl. müsstest du dann noch ein .u einfügen, also z.B. so: :confused:
C/C++ Code:
uiKernelTime.u.HighPart
C/C++ Code:
uiKernelTime.u.HighPart
C/C++ Code:
uiKernelTime.u.HighPart

siehe auch: http://msdn.microsoft.com/library/en-us/winprog/winprog/ularge_integer_str.asp

_________________
( Moderator im Webzeugs- und WinAPI-Forum )
MiC++ha
Mitglied

Benutzerprofil
Anmeldungsdatum: 06.09.2004
Beiträge: 395
Beitrag MiC++ha Mitglied 21:31:22 24.09.2004   Titel:              Zitieren

flenders schrieb:
Evtl. müsstest du dann noch ein .u einfügen, also z.B. so: :confused:
C/C++ Code:
uiKernelTime.u.HighPart
C/C++ Code:
uiKernelTime.u.HighPart
C/C++ Code:
uiKernelTime.u.HighPart

siehe auch: http://msdn.microsoft.com/library/en-us/winprog/winprog/ularge_integer_str.asp


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
Beitrag 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
Beitrag 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
Beitrag 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 :o)

_________________
( Moderator im Webzeugs- und WinAPI-Forum )
joomoo
Autor

Benutzerprofil
Anmeldungsdatum: 31.07.2004
Beiträge: 1519
Beitrag 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
Beitrag 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 :rolleyes:

_________________
( Moderator im Webzeugs- und WinAPI-Forum )
C/C++ Forum :: FAQ - WinAPI ::  CPU Auslastung auslesen  
Gehen Sie zu Seite Zurück  1, 2, 3, 4  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können keine Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum nicht antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.