Find Code:
All Words
Any of the Words
Exact Phrase
Home
:
Code
:
Forums
:
Submit
:
Mailing List
:
About
:
Contact
Code
All
VB.NET
ASP.NET
C#
VB Classic
ASP Classic
Snippets
Popular
Resources
Submit Code
Forums
Articles
Tips
Links
Books
Contest
Link to us
Get the % of cpu usage of a running thread
Author:
Pete Doxtader
Submitted:
9/1/2008
Version:
VB 2005
Compatibility:
VB 2005, VB 2008
Category:
Miscellaneous
Views:
17402
This class is used to get the % of cpu usage of a running thread by native thread id. It's a great way to be able to tell which thread is hammering your cpu. Usage: To watch cpu usage from within the thread to be watched: Dim CPUutil As New ThreadCPUusageWatcher Dim PercentUsage as Short CPUutil .Start() ' Use: CPUutil..NativeThreadID ' to get the id if the current thread, or set the id of the thread to be watched. PercentUsage = CPUutil .CPUusage ' to get the current percentage of cpu use of the watched thread To watch the cpu usage of background threads from another (the main?) thread: declare CPUutil public, and then set it new from with the thread to be watched. Ie: Public CPUutil as ThreadCPUusageWatcher ' Then, from within the thread to be watched: CPUutil = New ThreadCPUusageWatcher CPUutil.Start() ' CPUutil.CPUusage can then be called from any thread. ' Call: CPUutil.StopWatcher() ' to stop the watcher when your app closes.
Declarations:
Imports System.Diagnostics Imports System.Threading
Code:
Public Class ThreadCPUusageWatcher ' This class is used to get the % of cpu usage of a running thread by native thread id. ' It's a great way to be able to tell which thread is hammering your cpu. Usage: ' To watch cpu usage from within the thread to be watched: ' Dim CPUutil As New ThreadCPUusageWatcher ' Dim PercentUsage As Short ' CPUutil .Start() ' Use: ' CPUutil..NativeThreadID ' to get the id if the current thread, or set the id of the thread to be watched. ' PercentUsage = CPUutil.CPUusage ' to get the current percentage of cpu use of the watched thread ' To watch the cpu usage of background threads from another (the main?) thread: ' declare CPUutil public, and then set it new from with the thread to be watched. Ie: ' Public CPUutil As ThreadCPUusageWatcher ' Then, from within the thread to be watched: ' CPUutil = New ThreadCPUusageWatcher ' CPUutil.Start() ' CPUutil.CPUusage can then be called from any thread. ' Call: ' CPUutil.StopWatcher() ' to stop the watcher when your app closes. Private threadID As Int16 Private WatcherRunning As Boolean = False Private th1 As Thread Private Percentage As Long Public Sub New() threadID = AppDomain.GetCurrentThreadId End Sub Public Sub New(ByVal NativeThreadID As Int16) threadID = NativeThreadID End Sub Private Function GetCurrentNativeThreadID() As Int16 GetCurrentNativeThreadID = AppDomain.GetCurrentThreadId End Function ' Set the native ID of a process thread to be watched, or get your native thread id Public Property NativeThreadID() As Int16 Get Return GetCurrentNativeThreadID() End Get Set(ByVal value As Int16) threadID = value End Set End Property Public ReadOnly Property IsRunning() As Boolean Get Return WatcherRunning End Get End Property Public ReadOnly Property CPUusage() As Long Get Return Percentage End Get End Property Public Sub StopWatcher() WatcherRunning = False End Sub Public Sub Start() th1 = New System.Threading.Thread(AddressOf StartWatcher) th1.Start() End Sub Private Sub StartWatcher() Dim tx As System.Diagnostics.ProcessThreadCollection Dim t, tId, a, a1, a2, a3, a4, a5, CPUs As Int16 Dim CPUtimeEnd, CPUtimeStart As Double CPUs = Environment.GetEnvironmentVariable("NUMBER_OF_PROCESSORS") tx = System.Diagnostics.Process.GetCurrentProcess().Threads tId = 0 For t = 0 To tx.Count - 1 If tx.Item(t).Id = threadID Then tId = t End If Next If tId = 0 Then MsgBox("Thread could not be found.") Exit Sub End If WatcherRunning = True Try Do While WatcherRunning = True CPUtimeStart = tx.Item(tId).TotalProcessorTime.Milliseconds Thread.Sleep(200) CPUtimeEnd = tx.Item(tId).TotalProcessorTime.Milliseconds If (CPUtimeEnd > CPUtimeStart) Or (CPUtimeEnd = CPUtimeStart) Then a = a + 1 If a = 1 Then a1 = CPUtimeEnd - CPUtimeStart ElseIf a = 2 Then a2 = CPUtimeEnd - CPUtimeStart ElseIf a = 3 Then a3 = CPUtimeEnd - CPUtimeStart ElseIf a = 4 Then a4 = CPUtimeEnd - CPUtimeStart ElseIf a = 5 Then a5 = CPUtimeEnd - CPUtimeStart ElseIf a > 5 Then a = 1 End If Percentage = ((a1 + a2 + a3 + a4 + a5) / 5) / 2 Percentage = Percentage / CPUs If Percentage > 100 Then Percentage = 100 End If Loop Catch ex As Exception MsgBox(ex.Message) End Try WatcherRunning = False End Sub End Class
Home
|
Forums
|
Submit
|
Books
|
Mailing List
|
Advertising
|
About
|
Contact
© 2024 A1VBCode. All rights reserved.
Legal disclaimer & terms of use
Privacy statement