Verfasst: 01.10.2007 04:34
Eine Meisterfrage!! Ehm -Kaeru Gaman hat geschrieben:@Thalius
welche Lib?

entweder liegts dran dass es schon fast 5 uhr morgens ist oder .. hrm
Eine Meisterfrage!! Ehm -Kaeru Gaman hat geschrieben:@Thalius
welche Lib?
genau den Moment hatte ich auch gradewus, den Befehl kennste nich?
Code: Alles auswählen
Debug CpuUsage(CoreNo)
Code: Alles auswählen
Procedure.l cpu_count() ; Number of processors or cores
Protected SI.SYSTEM_INFO
GetSystemInfo_ (@SI)
ProcedureReturn SI\dwNumberOfProcessors
EndProcedure
Code: Alles auswählen
;- CPU-Auslastung-Ermittlung mit der PDH.DLL, auch für Multi-Core-CPU´s
;- "Helle" Klaus Helbing, 22.03.2008, PB4.10
;- Soll nur schmucklos die einfache Machbarkeit zeigen!
Global hQuery.l
Global RetVal.l
Global Core.l
Global SI.SYSTEM_INFO
;#PDH_CSTATUS_VALID_DATA = $0
#PDH_CSTATUS_NEW_DATA = $1
;ich mag keine Structuren...
Core = AllocateMemory(64) ;für max. 4 Cores, 0-15=Counter, 16-31=PdhStatus, 32-63=dblValue
Prototype.d ProtoValue(Para1.l, Para2.l) ;CallFunction geht nicht wegen Double-Rückgabewert!
Procedure.l cpu_count() ;Anzahl der Cores ermittlen
GetSystemInfo_ (@SI)
ProcedureReturn SI\dwNumberOfProcessors
EndProcedure
If OpenLibrary(0, "PDH.DLL")
RetVal = CallFunction(0, "PdhOpenQuery", 0, 1, @hQuery)
If RetVal
MessageRequester("Fehler !", "Aufruf von PdhOpenQuery fehlgeschlagen!")
EndIf
cpu_count()
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$=""
For i=0 To SI\dwNumberOfProcessors - 1
Value.ProtoValue = GetFunction(0, "PdhVbGetDoubleCounterValue")
B.d = Value(PeekL(Core+4*i), Core+16+i<<2)
Auslastung$ + "Auslastung Core" + Str(i)+" = "+ StrD(B, 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
CallFunction(0, "PdhCloseQuery", hQuery)
CloseLibrary(0)
EndIf
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
B.d = 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-Auslastungs-Anzeige", 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