CPU-Auslastung auslesen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Agent
Beiträge: 296
Registriert: 13.09.2004 11:28
Kontaktdaten:

CPU-Auslastung auslesen

Beitrag 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
Agent_Sasori
It's not a bug - it's a feature!
http://www.StephenKalisch.de | http://www.ria-tec.com | http://www.dirsync.de
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

Wenn Dir ein Befehl reicht, dann nimm PureTools (siehe Sig).
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Agent
Beiträge: 296
Registriert: 13.09.2004 11:28
Kontaktdaten:

Beitrag 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?
Agent_Sasori
It's not a bug - it's a feature!
http://www.StephenKalisch.de | http://www.ria-tec.com | http://www.dirsync.de
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag 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.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag 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 :D

Die Hilfedatei ist zufinden in der ZIP-Datei unter PureTools_I_020b\PureBasic\Help\PureTools_I.chm

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Agent
Beiträge: 296
Registriert: 13.09.2004 11:28
Kontaktdaten:

Beitrag von Agent »

*schäm* :oops:

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...
Agent_Sasori
It's not a bug - it's a feature!
http://www.StephenKalisch.de | http://www.ria-tec.com | http://www.dirsync.de
SBond
Beiträge: 266
Registriert: 22.05.2013 20:35
Computerausstattung: armseliger Laptop, mit wenig RAM und noch weniger CPU-Leistung. ...und die Grafikkarte.... ....naja.. da male ich doch lieber selber.
Wohnort: nahe Wolfsburg

Re: CPU-Auslastung auslesen

Beitrag 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
41 6c 73 6f 20 77 65 6e 6e 20 64 75 20 73 6f 20 76 69 65 6c 20 4c 61 6e 67 65 77 65 69 6c 65 20 68 61 73 74 2c 20 64 61 6e 6e 20 6b 61 6e 6e 73 74 20 64 75 20 61 75 63 68 20 67 6c 65 69 63 68 20 7a 75 20 6d 69 72 20 6b 6f 6d 6d 65 6e 20 75 6e 64 20 61 62 77 61 73 63 68 65 6e 2e

:D
Benutzeravatar
Bisonte
Beiträge: 2427
Registriert: 01.04.2007 20:18

Re: CPU-Auslastung auslesen

Beitrag 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
PureBasic 6.04 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
SBond
Beiträge: 266
Registriert: 22.05.2013 20:35
Computerausstattung: armseliger Laptop, mit wenig RAM und noch weniger CPU-Leistung. ...und die Grafikkarte.... ....naja.. da male ich doch lieber selber.
Wohnort: nahe Wolfsburg

Re: CPU-Auslastung auslesen

Beitrag 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
41 6c 73 6f 20 77 65 6e 6e 20 64 75 20 73 6f 20 76 69 65 6c 20 4c 61 6e 67 65 77 65 69 6c 65 20 68 61 73 74 2c 20 64 61 6e 6e 20 6b 61 6e 6e 73 74 20 64 75 20 61 75 63 68 20 67 6c 65 69 63 68 20 7a 75 20 6d 69 72 20 6b 6f 6d 6d 65 6e 20 75 6e 64 20 61 62 77 61 73 63 68 65 6e 2e

:D
texti
Beiträge: 42
Registriert: 13.03.2009 13:24

Re: CPU-Auslastung auslesen

Beitrag von texti »

Hallo zusammen!
Manche Sachen braucht man immer wieder :D
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 :wink:
Danke für Eure Mühe
Gruß
Gorden
Nichts wissen macht nichts. Man muß nur wissen, wo es steht, oder wen man fragen kann . . .
Antworten