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 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 16: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
Beitrag flenders Moderator 17: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: 1519
Beitrag joomoo Autor 20:32:28 21.09.2004   Titel:              Zitieren

flenders schrieb:
Kannst du dir über GetProcessTimes ausrechnen :)

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
Beitrag flenders Moderator 21: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 21:55:04 21.09.2004, insgesamt 2-mal bearbeitet
joomoo
Autor

Benutzerprofil
Anmeldungsdatum: 31.07.2004
Beiträge: 1519
Beitrag joomoo Autor 16: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
Beitrag flenders Moderator 16: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: 1519
Beitrag joomoo Autor 19: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
Beitrag MiC++ha Mitglied 12: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
Beitrag flenders Moderator 13: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
Beitrag MiC++ha Mitglied 14: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
C/C++ Forum :: FAQ - WinAPI ::  CPU Auslastung auslesen  
Gehen Sie zu Seite 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.