 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 02.12.2008, 21:09 Titel: CPU- und Speicherauslastung ermitteln |
|
|
Ich will ein Programm schreiben, mit dem ich die CPU-Auslastung insgesamt und die CPU-Auslastung und auch die Speicherauslastung jedes einzelnen Prozesses auslesen und loggen kann.
Für die CPU-Auslastung insgesamt gibt es ein Code-Beispiel von csde_rats (http://www.freebasic-portal.de/index.php?s=code&id=94). Das ist aber mit VBS und das wollte ich doch etwas anders machen.
Ich hab noch was anderes gefunden:
Code: | #Include "windows.bi"
#Undef HiWord
#Undef LoWord
#Define HiWord(Ausdruck) Ausdruck = CUnsg(Ausdruck) Shr 16 And &hFFFF
#Define LoWord(Ausdruck) Ausdruck = Ausdruck AND 65535
Declare Function GetCPULoad() As Double
Function GetCPULoad() As Double
Static As Dword dwLastProcessTime = 0
Static As Dword dwLastSystemTime = 0
Static As Double dCPULoad = 0
Dim As FILETIME ftCreationTime, ftExitTime, ftKernelTime, ftUserTime
GetProcessTimes(GetCurrentProcess(),@ftCreationTime,@ftExitTime,@ftKernelTime,@ftUserTime)
Dim As ULongInt uiKernelTime, uiUserTime
HiWord(uiKernelTime) = ftKernelTime.dwHighDateTime
LoWord(uiKernelTime) = ftKernelTime.dwLowDateTime
HiWord(uiUserTime) = ftUserTime.dwHighDateTime
LoWord(uiUserTime) = ftUserTime.dwLowDateTime
Dim As Dword dwActualProcessTime = Cast(Dword, ((uiKernelTime + uiUserTime)/100))
Dim As Dword dwActualSystemTime = GetTickCount()
If(dwLastSystemTime) Then
dCPULoad = Cast(Double, (dwActualProcessTime-dwLastProcessTime)/(dwActualSystemTime-dwLastSystemTime))
EndIf
dwLastProcessTime = dwActualProcessTime
dwLastSystemTime = dwActualSystemTime
return dCPULoad
End Function
Print "Init: " & GetCPULoad()
Do
Sleep 500
Print "CPU Auslastung: " & GetCPULoad() & "%"
If InKey = Chr(27) Then Exit Do
Loop
Sleep |
Das gibt aber bei mir immer nur den Wert 0 raus obwohl der Taskmanager was anderes sagt.
Das nächste Problem ist, die CPU- und Speicherauslastung für jeden einzelnen Prozess zu ermitteln. Dazu hab ich gar nichts gefunden. Im vb@rchiv hab ich auch schon geschaut, aber nichts passendes gefunden.
Wenigstens hab ich schon einen Code, um die aktuell aktiven Prozesse auszugeben:
Code: | #Include Once "windows.bi"
#Include Once "win/tlhelp32.bi"
Declare Sub GetExeNames
Declare Function ProcessFirst Lib "kernel32" Alias _
"Process32First" (ByVal hSnapShot As handle, uProcess _
As PROCESSENTRY32) As Long
Declare Function ProcessNext Lib "kernel32" Alias _
"Process32Next" (ByVal hSnapShot As handle, uProcess _
As PROCESSENTRY32) As Long
GetExeNames
Sleep
end
Sub GetExeNames
Dim hSnapShot As handle, Result As Long
Dim aa As String
Dim Process As PROCESSENTRY32
hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, null)
If hSnapShot = 0 Then Exit Sub
Process.dwSize = Len(Process)
Result = ProcessFirst(hSnapShot, Process)
Do While Result <> 0
aa = Process.szExeFile
Print aa
Result = ProcessNext(hSnapShot, Process)
Loop
CloseHandle(hSnapShot)
End Sub
|
Kann mir jemand die passenden WinAPI-Funktionen sagen, vielleicht auch mit Beispiel
MOD |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 02.12.2008, 23:24 Titel: |
|
|
An fbProcMon hab ich auch schon gedacht, aber nachdem ich in den vielen Dateien nichts gesehen hab und das Programm die CPU- und Speicherauslastung nicht anzeigt, hab ich gedacht, dass es einfach nicht drin ist.
Kannst du mir vielleicht sagen, wo in etwa du das hast, fremde Codes sind immer so unübersichtlich
@dreael: Über WMI wollt ich es eben nicht machen, weil ich das in der Registry geblockt habe und auch so lassen möchte. Dein Beispiel ist ja das gleiche, das ich im ersten Post verlinkt hab. |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|