CPU Usage unter PB 4.0
Re: CPU Usage unter PB 4.0
Hallo
mit PB 4.40 kriege ich bei der Zeile
RetVal = CallFunction(0, "PdhVbAddCounter", hQuery, "\Prozessor("+ Str(i) +")\Prozessorzeit (%)", Core+4*i) ;Counter
den Fehler: Falscher Parametertyp. Zahl anstelle eines Strings erwartet
Liegt das an der PB Version, oder muss ich da noch was einbinden?
LG
Peter
mit PB 4.40 kriege ich bei der Zeile
RetVal = CallFunction(0, "PdhVbAddCounter", hQuery, "\Prozessor("+ Str(i) +")\Prozessorzeit (%)", Core+4*i) ;Counter
den Fehler: Falscher Parametertyp. Zahl anstelle eines Strings erwartet
Liegt das an der PB Version, oder muss ich da noch was einbinden?
LG
Peter
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: CPU Usage unter PB 4.0
Liegt an der PB VersionPeter-AC hat geschrieben:Liegt das an der PB Version, oder muss ich da noch was einbinden?
LG
Peter
Ansonsten sollte man sowieso seit PB 4.0 besser mit Prototypes arbeiten!Geschichte PB 4.41 hat geschrieben:- Geändert: Call(C)Function(Fast) Parameter wurden geändert von 'Any' in 'Integer'.
Gruß
Thomas
Re: CPU Usage unter PB 4.0
Hallo Thomas
funzt leider garnicht.
Wenn ich den Befehl so ändere:
RetVal = CallFunction(0, "PdhVbAddCounter", hQuery, Core+4*i) ;Counter
dann kann ich das Programm zwar zu einer EXE umwandeln, bekomme aber zur Laufzeit den Fehler Funktion gescheitert. Mit Debugger schmiert es mir bei Read Icon ab.
Da ich Anfänger in PB bin, überfordert mich dein Beispiel leider. Schade.
LG
Peter
funzt leider garnicht.
Wenn ich den Befehl so ändere:
RetVal = CallFunction(0, "PdhVbAddCounter", hQuery, Core+4*i) ;Counter
dann kann ich das Programm zwar zu einer EXE umwandeln, bekomme aber zur Laufzeit den Fehler Funktion gescheitert. Mit Debugger schmiert es mir bei Read Icon ab.
Da ich Anfänger in PB bin, überfordert mich dein Beispiel leider. Schade.
LG
Peter
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: CPU Usage unter PB 4.0
Da ich den Code, den Du verwendest, nicht kenne, bzw. Du nur einen kleinen Auszug gepostet hast
und ich keine Lust habe, diesen Code zu suchen, kann ich Dir auch nicht vernünftig weiterhelfen.
Das anpassen des CallFunction statt der Nutzung von Prototypes lehne ich jedenfalls ab. Ohne
Code oder Link zum Code, bzw. erforderlicher DLL o. ä. kann ich nichts machen.
Gruß
Thomas
und ich keine Lust habe, diesen Code zu suchen, kann ich Dir auch nicht vernünftig weiterhelfen.
Das anpassen des CallFunction statt der Nutzung von Prototypes lehne ich jedenfalls ab. Ohne
Code oder Link zum Code, bzw. erforderlicher DLL o. ä. kann ich nichts machen.
Gruß
Thomas
Re: CPU Usage unter PB 4.0
Da fehlt das @ (Zeiger) vor den Strings
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: CPU Usage unter PB 4.0
Dann wurden aber immer noch keine Prototypes genutzt und der Code ist immk-soft hat geschrieben:Da fehlt das @ (Zeiger) vor den Strings
PureBasic 3.x Kompatibilitätsmodus

Re: CPU Usage unter PB 4.0
Hallo Thomasts-soft hat geschrieben:Da ich den Code, den Du verwendest, nicht kenne, bzw. Du nur einen kleinen Auszug gepostet hast
und ich keine Lust habe, diesen Code zu suchen, kann ich Dir auch nicht vernünftig weiterhelfen.
Das anpassen des CallFunction statt der Nutzung von Prototypes lehne ich jedenfalls ab. Ohne
Code oder Link zum Code, bzw. erforderlicher DLL o. ä. kann ich nichts machen.
Gruß
Thomas
es ist das Beispiel von Helle
LG
Peter
Code: Alles auswählen
;- CPU-Auslastung-Ermittlung mit der PDH.DLL, Anzeige-Beispiel für 2 Cores
;- W2k, WXP, Vista(?)
;- "Helle" Klaus Helbing, 24.03.2008, PB4.10
Global hQuery.l
Global RetVal.l
Global Core.l
Global SI.SYSTEM_INFO
Global IData.b
;#PDH_CSTATUS_VALID_DATA = $0
#PDH_CSTATUS_NEW_DATA = $1
OpenWindow(0, 0, 0, 0, 0, "", #PB_Window_SystemMenu | #PB_Window_Invisible) ;Window nicht anzeigen
;ich mag keine Structuren...
Core = AllocateMemory(332) ;für max. 4 Cores, 0-15=Counter, 16-31=PdhStatus, 32-63=dblValue
;-------- Alle Daten für Icon einlesen
Restore IconData
For x = 64 To 331
Read IData
PokeB(Core + x , IData)
Next x
;--------
;-------- Erstmal ein Icon anzeigen
Icon = CatchImage(0, Core + 64) ;Art und Grösse des Images werden aus den Header-Daten ermittelt
AddSysTrayIcon(0, WindowID(0), Icon)
;--------
Prototype.d ProtoValue(Para1.l, Para2.l) ;CallFunction geht nicht wegen Double-Rückgabewert!
If OpenLibrary(0, "PDH.DLL") ;MS-File in \System32
RetVal = CallFunction(0, "PdhOpenQuery", 0, 1, @hQuery)
If RetVal
MessageRequester("Fehler !", "Aufruf von PdhOpenQuery fehlgeschlagen!")
EndIf
GetSystemInfo_(@SI) ;Anzahl der Cores ermittlen
For i=0 To SI\dwNumberOfProcessors - 1
RetVal = CallFunction(0, "PdhVbAddCounter", hQuery, "\Prozessor("+ Str(i) +")\Prozessorzeit (%)", Core+4*i) ;Counter
If RetVal
MessageRequester("Fehler !", "Aufruf von PdhVbAddCounter für Core"+ Str(i) +" fehlgeschlagen!")
EndIf
Next
Repeat
CallFunction(0, "PdhCollectQueryData", hQuery)
Auslastung$=""
Value.ProtoValue = GetFunction(0, "PdhVbGetDoubleCounterValue")
For i=0 To SI\dwNumberOfProcessors - 1 ;Anzeige: Core0 oben, Core1 unten
A.l=i<<3
B.d=Core+32+A ;dblValue
B = Value(PeekL(Core+4*i), Core+16+i<<2)
B$ = StrD(B, 0)
;Auslastung$ + "Auslastung Core" + Str(i)+" = "+ StrD(B, 0) + "%" + Space(20)
If B$ = "100"
B$ = "99" ;Anzeige nur zweistellig, 99 ist also auch 100
EndIf
B$=RSet(B$, 2, "0") ;führende Null bei einstelligem Wert
If PeekL(Core+16+i<<2) > #PDH_CSTATUS_NEW_DATA ;s.o.
A = -1 ;war kein gültiger Wert
Break
Else
E = Val(Right(B$, 1))
For x = 0 To 6 ;Einer-Werte
PokeB(Core + 235-36*i + (x << 2) , PeekB(Core + 262 + (E * 7) + x))
Next x
Z = Val(Left(B$, 1))
For x = 0 To 6 ;Zehner-Werte
PokeB(Core + 234-36*i + (x << 2) , PeekB(Core + 262 + (Z * 7) + x))
Next x
Icon = CatchImage(0, Core + 64)
ChangeSysTrayIcon(0, Icon)
EndIf
Next
;Debug Auslastung$
Delay(500)
Event = WindowEvent()
If Event = #PB_Event_SysTray ;Geduld, Abfrage-Anzeige kann mehrere Sekunden dauern!
If EventType() = #PB_EventType_LeftDoubleClick
Abfrage = MessageRequester("Intel-Core-Duo-Temperaturanzeige", Space(26) + "Beenden ?", #PB_MessageRequester_YesNo)
If Abfrage = #PB_MessageRequester_Yes
CloseWindow(0)
End
EndIf
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
CallFunction(0, "PdhCloseQuery", hQuery)
CloseLibrary(0)
EndIf
;--------------------------------------------------------------------------------------------------
DataSection
;-------- Header eines 16x16-Icons mit 2 "Farben", bleibt konstant
IconData:
Data.b 0, 0, 1, 0, 1, 0, 16, 16, 2, 0 ,0 ,0, 0, 0, 176, 0
Data.b 0, 0, 22, 0, 0, 0, 40, 0, 0, 0, 16, 0, 0, 0, 32, 0
Data.b 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0
Data.b 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
Data.b 0, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
Data.b 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
Data.b 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
Data.b 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
Data.b 0, 0, 0, 0, 0, 0
;-------- Ab hier den "Rest" der Icon-Datei mit Null auffüllen, nimmt dann die Bit-Muster
;-------- der Ziffern auf bzw. füllt den Abstand zwischen obere und untere Ziffern (255) aus
;-------- Auffüllen mit Null, weil die Ziffern-Werte durch Null-Words getrennt werden
Data.b 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
Data.b 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
Data.b 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0
Data.b 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
Data.b 0, 0, 0, 0, 0, 0
;-------- Bit-Muster der Ziffern 0 bis 9
Data.b 195, 189, 189, 189, 189, 189, 195 ;Ziffer 0
Data.b 227, 247, 247, 247, 247, 199, 231 ;Ziffer 1
Data.b 193, 191, 191, 193, 253, 253, 131 ;Ziffer 2
Data.b 131, 253, 253, 195, 253, 253, 131 ;Ziffer 3
Data.b 247, 247, 247, 129, 183, 183, 191 ;Ziffer 4
Data.b 131, 253, 253, 131, 191, 191, 129 ;Ziffer 5
Data.b 195, 189, 189, 131, 191, 191, 195 ;Ziffer 6
Data.b 239, 247, 247, 251, 253, 189, 129 ;Ziffer 7
Data.b 195, 189, 189, 195, 189, 189, 195 ;Ziffer 8
Data.b 195, 253, 253, 193, 189, 189, 195 ;Ziffer 9
EndDataSection
Re: CPU Usage unter PB 4.0
Hier die Simple-Version mal mit Prototypes (32-Bit-Windows):
Die Ziffern-Anzeige (eh nur für 2 Cores in meinem Beispiel) sollte weiterhin funzen.
Gruß
Helle
P.S.:In obigen Beispielen Unnützes entfernt und Text richtiggestellt.
Code: Alles auswählen
;- CPU-Auslastung-Ermittlung mit der PDH.DLL, auch für Multi-Core-CPU´s
;- Version mit Prototypen
;- W2k, WXP, Vista(?)
;- "Helle" Klaus Helbing, 03.02.2010, PB4.41 (x86), 32-Bit-Windows
;- Soll nur schmucklos die einfache Machbarkeit zeigen!
If OpenLibrary(0, "PDH.DLL") ;MS-File in \System32
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
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)
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
For i = 0 To SI\dwNumberOfProcessors - 1
Proz$ = "\Prozessor(" + Str(i) + ")\Prozessorzeit (%)"
RetVal = AddCounter(hQuery, @Proz$, Core + (i << 2))
If RetVal
MessageRequester("Fehler !", "Aufruf von PdhVbAddCounter für Core"+ Str(i) + " fehlgeschlagen!")
EndIf
Next
Repeat
CollectData(hQuery)
Auslastung$ = ""
For i = 0 To SI\dwNumberOfProcessors - 1
CoreLast.d = Auslastung(PeekL(Core + 4 * i), Core + 16 + (i << 2))
Auslastung$ + "Auslastung Core" + Str(i) + " = " + StrD(CoreLast, 2) + "%" + Space(20)
If PeekL(Core + 16 + (i << 2)) > #PDH_CSTATUS_NEW_DATA ;s.o.
A = -1 ;war kein gültiger Wert
Break
EndIf
Next
If A <> -1
Debug Auslastung$
EndIf
Delay(500)
ForEver
CloseQuery(@hQuery)
CloseLibrary(0)
EndIf
Gruß
Helle
P.S.:In obigen Beispielen Unnützes entfernt und Text richtiggestellt.
Re: CPU Usage unter PB 4.0
Hallo Helle
funzt wunderbar. Vielen Dank.
LG
Peter
funzt wunderbar. Vielen Dank.
LG
Peter
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: CPU Usage unter PB 4.0
Jetzt hätte man aber auch beim Prototyp ProtoAddCounter, den zweiten Parameter als String definieren
können
.
Aber sieht doch viel besser mit Prototypes aus
Gruß
Thomas
können

Aber sieht doch viel besser mit Prototypes aus

Gruß
Thomas