Buchempfehlung
Windows System Programming
Windows System Programming
Das Kompendium liefert viele interessante Informationen zur Windows-Programmierung auf Englisch. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Code-Beispiel

Code-Beispiele » System

CPU / System Auslastung unter LINUX ermitteln

Lizenz:Erster Autor:Letzte Bearbeitung:
k. A.MitgliedThePuppetMaster 02.01.2008

Dieses Beispiel zeigt, wie man unter Linux die CPU Auslastung ermitteln kann. Dabei kann die Genauigkeit durch Angabe der Wartezeit "V_WaitMS" verändert werden. Je grösser die Zeit der Messung, desto genauer wird der prozentuale Anteil errechnet, je geringer, desto ungenauer. In der Regel wird eine Wartezeit von 1sek. genutzt. Dies ist ebenfalls der minimale Wert in der KDE Systemstatistik.

Das hier angewande Verfahren basiert auf den Systemstatistiken welche von Linux in "/proc/stat" hinterlegt werden. Dort speichert Linux die Prozesslastung ab, desen Beschreibungen hier zu finden sind:
Externer Link!http://www.linuxhowtos.org/System/procstat.htm
Wie der Prozentualle Anteil erechnet wird, läst sich in der Wiki nachlesen:
Externer Link!http://de.wikipedia.org/wiki/Load#Prozentuale_Auslastungswerte_bei_Linux

"/proc/stat" liefert auch einzelauslastungen zu jeder CPU, falls gewünscht. Hier muss jedoch bei die "F_Usage_Stat" Function umgebaut werden um die entsprechende CPU zeile zu lesen.

Der erste Codeblock ist das Beispiel, der zweite sind die nötigen Berechnungskomponenten.

Declare Function F_Usage_Stat(B_DD() as ULongInt, ByRef B_DC as UByte) as UByte
Declare Function F_Usage_CPU_Percent(V_WaitMS as UShort) as Short


Dim DD() as ULongInt
Dim DC as UByte
If F_Usage_Stat(DD(), DC) = 0 Then
    Print "user:    " & DD(1)
    Print "nice:    " & DD(2)
    Print "system:  " & DD(3)
    Print "idle:    " & DD(4)
    Print "iowait:  " & DD(5)
    Print "irq:     " & DD(6)
    Print "softirq: " & DD(7)
End If
Do
    Print F_Usage_CPU_Percent(100)
    If Inkey = Chr(27) Then Exit Do
    Sleep 500
Loop

'SYSTEM-STATISTIK AUSLESEN
Function F_Usage_Stat(B_DD() as ULongInt, ByRef B_DC as UByte) as UByte
B_DC = 0
Dim XFID as Integer
Dim D as String
XFID = FreeFile
Open "/proc/stat" for input as #XFID
Input #XFID, D
Close #XFID
Dim XPos as UShort
XPos = InStr(1, D, " ")
If XPos <= 0 Then Return 1
D = Mid(D, XPos + 1)
Dim DD(8) as String
Dim T as String
Do
    XPos = InStr(1, D, " ")
    If XPos > 0 Then
        T = Mid(D, 1, XPos - 1)
        D = Mid(D, XPos + 1)
    Else: T = D: D = ""
    End If
    If T <> "" Then
        B_DC += 1: Redim Preserve B_DD(B_DC) as ULongInt
        B_DD(B_DC) = ValLng(T)
    End If
    If (D = "") or (B_DC = 7) Then Exit Do
Loop
If B_DC <> 7 Then Return 1
Return 0
End Function


'SYSTEM-STATISTIK AUSLESEN UND PROZENTUALE CPU AUSLASTUNG AUSRECHNEN
Function F_Usage_CPU_Percent(V_WaitMS as UShort) as Short
Dim DD() as ULongInt
Dim LD() as ULongInt
Dim DC as UByte
If F_Usage_Stat(LD(), DC) <> 0 Then Return -1
sleep V_WaitMS
If F_Usage_Stat(DD(), DC) <> 0 Then Return -1
DD(1) = DD(1) - LD(1)
DD(2) = DD(2) - LD(2)
DD(3) = DD(3) - LD(3)
DD(4) = DD(4) - LD(4)
DD(1) = DD(1) + DD(2) + DD(3) + DD(4)
Dim T as Short
T = 100 - 100 / CSng(DD(1)) * CSng(DD(4))
If T < 0 Then T = 0
If T > 100 Then T = 100
Return T
End Function

Zusätzliche Informationen und Funktionen
  Bearbeiten Bearbeiten  

  Versionen Versionen