Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1551 | Anzahl registrierter User: 1841 | Besucher online: 193
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Member of Microsoft Community Leader/Insider Program (CLIP)

CPU Last von mehreren CPUs überwachen


Autor: Tim Hartwig
Sprache: VB.NET
Bewertung: 9
(1 Bewertung)
Anzahl der Aufrufe: 6553
  
Kick it on dotnet-kicks.de  

Beschreibung:

Mit dieser Klassen kann man die CPU Last von einer oder mehreren CPUs überwachen.

Wichtig: Da diese Klasse die CPUs in eigenen Threads überwacht, muss drauf geachtet werden das wenn man die Werte an die Form übergeben will, man mit Delegates und Invoke arbeiten muss. Ein Beispiel dazu findet man in meinem Kommentar.


Abgelegt unter: CPU, Hardware, Last, Load, Thread.



Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
Imports System.Diagnostics

''' <summary>
''' Mit dieser Klassen kann man die CPU Last von einer oder mehreren CPUs überwachen.
''' </summary>
Public Class CPULoadWatcher
    ''' <summary>
    ''' Dieses Event wird von jedem hinzugefügtem Watcher in den vorgegebenen
    ''' Zeitintervallen aufgerufen und übergibt die aktuelle CPU Last.
    ''' Hinweis: Der Parameter e wird von einem anderen Thread aus übergeben.
    ''' </summary>
    Public Event CPULoadChanged(ByVal e As CPULoadEventArgs)
    Private WatcherCollection As New Generic.Dictionary(Of UShort, Watcher)

    ''' <summary>
    ''' Fügt einen Watcher für eine CPU hinzu
    ''' </summary>
    ''' <param name="CPU">Die Nummer der CPU die überwacht werden soll</param>
    ''' <param name="Interval">Gibt an in welchen Zeitabständen (ms) die CPU Last ausgelesen werden soll. Standardwert ist 1000ms</param>
    Public Sub AddWatcher(ByVal CPU As UShort, Optional ByVal Interval As UInteger = 1000)
        If WatcherCollection.ContainsKey(CPU) = False Then
            Dim W As New Watcher(CPU, Interval)
            AddHandler W.Changed, AddressOf OnCPULoadChanged
            WatcherCollection.Add(CPU, W)
            W.Start()
        End If
    End Sub

    ''' <summary>
    ''' Entfernt einen Watcher für eine CPU
    ''' </summary>
    ''' <param name="CPU">Die Nummer der CPU dessen Watcher entfernt werden soll</param>
    Public Sub RemoveWatcher(ByVal CPU As UShort)
        If WatcherCollection.ContainsKey(CPU) = True Then
            WatcherCollection(CPU).Abort()
            WatcherCollection.Remove(CPU)
        End If
    End Sub

    Private Sub OnCPULoadChanged(ByVal e As CPULoadEventArgs)
        RaiseEvent CPULoadChanged(e)
    End Sub

    Private Class Watcher
        Private mCPU As UShort = 0
        Private mInterval As UInteger
        Private mAbort As Boolean = False
        Private PerfCounter As PerformanceCounter
        Public Event Changed(ByVal e As CPULoadEventArgs)

        Sub New(ByVal CPU As UShort, ByVal Interval As UInteger)
            mCPU = CPU
            mInterval = Interval
        End Sub

        Public Sub Start()
            PerfCounter = New PerformanceCounter("Processor", "% Processor Time", mCPU.ToString)
            Dim T As New Threading.Thread(AddressOf Watch)
            T.Start()
        End Sub

        Public Sub Abort()
            mAbort = True
        End Sub

        Private Sub Watch()
            Do
                If mAbort = True Then
                    mAbort = False
                    Exit Do
                End If

                RaiseEvent Changed(New CPULoadEventArgs(mCPU, PerfCounter.NextValue))
                Threading.Thread.Sleep(mInterval)
            Loop
        End Sub
    End Class

    Public Class CPULoadEventArgs
        Private mCPU As UShort
        Private mCPULoad As Single

        Public ReadOnly Property CPU() As UShort
            Get
                Return mCPU
            End Get
        End Property

        Public ReadOnly Property CPULoad() As Single
            Get
                Return mCPULoad
            End Get
        End Property

        Sub New(ByVal CurrCPU As UShort, ByVal CurrCPULoad As Single)
            mCPU = CurrCPU
            mCPULoad = CurrCPULoad
        End Sub
    End Class
End Class
Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)

Tim Hartwig schrieb am:  17.12.2006 05:11:27

Hier ein Beispiel für die Anwendung der Klasse mit Delegate und Invoke für einen gültigen Threadübergriff.

Private WithEvents CLW As New CPULoadWatcher
Private Delegate Sub CWLDelegate(ByVal e As CPULoadWatcher.CPULoadEventArgs)

Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Button1.Click
CLW.AddWatcher("0")
End Sub

Private Sub CLW_CPULoadChanged(ByVal e As CPULoadWatcher.CPULoadEventArgs)
Handles CLW.CPULoadChanged
Me.Invoke(New CWLDelegate(AddressOf ShowValue), e)
End Sub

Private Sub ShowValue(ByVal e As CPULoadWatcher.CPULoadEventArgs)
Me.Text = e.CPULoad
End Sub
Volker Steitz schrieb am:  17.12.2006 18:06:05

Wirklich gut gemacht, Kompliment


schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.