Seite 1 von 3
CPU-Auslastung auslesen
Verfasst: 24.11.2004 01:08
von Agent
Hi Leutz.
Ich wollt mal nachfragen, wie ich am besten / einfachsten die CPU-Auslastung auslesen kann. Ich weiß das hier im Forum jemand über sein Prog berichtet (Leiste mit CPU, HDD usw) aber leider der code nirgends zu bekommen ist - zumindest dieser Teil.
Hat jemand nen Tipp???
Thx im voraus!
[EDIT Danilo] Verschoben Tipss&Tricks -> Allgemein
Verfasst: 24.11.2004 08:32
von Danilo
Wenn Dir ein Befehl reicht, dann nimm PureTools (siehe Sig).
Verfasst: 24.11.2004 15:26
von Agent
hi danilo.
grundsätzlich würde mir ne proc ala cpuusage() die einen prozentwert oder ähnliches liefert schon ausreichen.
Leider finde ich in deinen cpu1.pb / cpu2.pb / cpu3.pb zwar eine anwendung, aber die eigentliche procedure fehlt (cpuUsage()). Zudem sind die Proggies nicht lauffähig da einiges fehlt CallCOM usw.
Hast Du die procedure cpuUsage() einzeln (lauffähig), sodass ich sie aufrufen kann und irgendeinen wert zurück bekomme?
Verfasst: 24.11.2004 15:47
von Danilo
Agent hat geschrieben:Hast Du die procedure cpuUsage() einzeln (lauffähig), sodass ich sie aufrufen kann und irgendeinen wert zurück bekomme?
Ist doch in den Libs. Libs installieren (PB\PureLibraries\UserLibraries\),
Editor/Compiler neu starten, CpuUsage() aufrufen.
Verfasst: 24.11.2004 15:48
von PMV
PureTools ist eine UserLib, das heißt die Dateien, die du runtergeladen hast, müssen in verschiedene Unterverzeichnisse von PureBasic gepackt werden. Mach das, was in der Readme.txt drinn steht, das heißt öffne die Hilfe von PureTools und mach dann das, was unter Installation steht. Dann starteste PB neu und es sollte alles funktionieren
Die Hilfedatei ist zufinden in der ZIP-Datei unter PureTools_I_020b\PureBasic\Help\PureTools_I.chm
MFG PMV
Verfasst: 24.11.2004 16:52
von Agent
*schäm*
Recht habt. Ich nehm alles zurück. Habs nicht gesehen.
Manchmal sollte man doch die Readme lesen. (Verdammt)
THX! Hab alles was ich brauch.
...verdammt...verdammt..verdammt...
Re: CPU-Auslastung auslesen
Verfasst: 06.12.2013 16:08
von SBond
.....9 Jahre später....
Hi Leute,
ich versuche nun auch seit vielen Stunden irgendwie die CPU-Auslastung auszulesen.
Gibt es ggf. eine aktuelle Lösung für PureBasic 5.21, bzw hatte jemand schon mal dieses Problem ?
lg
SBond
Re: CPU-Auslastung auslesen
Verfasst: 06.12.2013 17:52
von Bisonte
Es gibt hier im Forum von Helle irgendwo einen Thread mit Beispiel für das Auslesen der Last von einzelnen CPU Kernen.
Ich hatte grade gestern sowas gebraucht für ein G19 Applet.
Ah da haben wir es ja :
http://purebasic.fr/german/viewtopic.ph ... e&start=40
Re: CPU-Auslastung auslesen
Verfasst: 06.12.2013 22:14
von SBond
super

vielen Dank!
Der Code von Helles war schon ein guter Ansatz.
Ich habe den Code aktualisiert, damit er auch mit Unicode kompatibel ist.
--> für Windows 2000 oder höher (x86, x64, ASCII und Unicode)
Code: Alles auswählen
Prototype.l ProtoOpenQuery (Para1.l, Para2.l, Para3.l)
Prototype.l ProtoCloseQuery (Para1.l)
Prototype.l ProtoCollectData (Para1.l)
Prototype.d ProtoAuslastung (Para1.l, Para2.l) ;hier wegen Double wirklich notwendig
Prototype.l ProtoAddCounter (Para1.l, Para2.l, Para3.l)
#CPU_CORES = 64
Dim CPU_Last.d(#CPU_CORES)
Procedure CPU_Auslastung (*Delay)
Shared CPU_Last()
If OpenLibrary(0, "PDH.DLL") ; MS-File in \System32
Global SI.SYSTEM_INFO
#PDH_CSTATUS_NEW_DATA = $1
Core = AllocateMemory(64) ; für max. 4 Cores, 0-15=Counter, 16-31=PdhStatus, 32-63=dblValue oder Structure
OpenQuery.ProtoOpenQuery = GetFunction(0, "PdhOpenQuery")
CloseQuery.ProtoCloseQuery = GetFunction(0, "PdhCloseQuery")
CollectData.ProtoCollectData = GetFunction(0, "PdhCollectQueryData")
AddCounter.ProtoAddCounter = GetFunction(0, "PdhVbAddCounter")
Auslastung.ProtoAuslastung = GetFunction(0, "PdhVbGetDoubleCounterValue")
RetVal = OpenQuery(0, 1, @hQuery)
If RetVal
MessageRequester("Fehler !", "Aufruf von PdhOpenQuery fehlgeschlagen!")
End
EndIf
GetSystemInfo_(@SI) ; Anzahl der Cores ermitteln
CPU_Last(0) = SI\dwNumberOfProcessors ; ins Array speichern
For i = 1 To SI\dwNumberOfProcessors
Proz$ = "\Prozessor(" + Str(i-1) + ")\Prozessorzeit (%)"
; konvertiert Proz$ in das ASCII-Format
ASCII_String = AllocateMemory(Len(Proz$) + 1)
PokeS(ASCII_String, Proz$, -1, #PB_Ascii)
RetVal = AddCounter(hQuery, ASCII_String, Core + ((i-1) << 2))
If RetVal
MessageRequester("Fehler !", "Aufruf von PdhVbAddCounter für Core"+ Str(i-1) + " fehlgeschlagen!")
EndIf
Next
Repeat
CollectData(hQuery)
For i = 1 To SI\dwNumberOfProcessors
CoreLast.d = Auslastung(PeekL(Core + 4 * (i-1)), Core + 16 + ((i-1) << 2))
If PeekL(Core + 16 + ((i-1) << 2)) > #PDH_CSTATUS_NEW_DATA
Break
Else
CPU_Last(i) = CoreLast
EndIf
Next
Delay (*Delay)
ForEver
CloseQuery(@hQuery)
CloseLibrary(0)
EndIf
EndProcedure
CreateThread(@CPU_Auslastung(), 500)
Repeat
Ausgabe$ = ""
For i = 1 To CPU_Last(0)
Ausgabe$ + "Kern " + Str(i) + ": " + StrD(CPU_Last(i),2) + "%" + #TAB$
Next
Debug Ausgabe$
Delay (500)
ForEver
ich bin kein Profi, daher gibt es bestimmt noch Verbesserungspotential.
lg
SBond
Re: CPU-Auslastung auslesen
Verfasst: 12.07.2017 12:05
von texti
Hallo zusammen!
Manche Sachen braucht man immer wieder
Der Code von SBond funktioniert auch mit PB 5.60 (x86) und Win10 (x64) wunderbar. Was muß da alles angepaßt werden, damit es für mehr als 4 Cores läuft? Mein schöner neuer AMD mit 8 Kernen und damit 16 Threads soll ja glänzen
Danke für Eure Mühe
Gruß
Gorden