减少线程CPU使用率

时间:2014-05-21 06:18:04

标签: vb.net multithreading cpu-usage

所以我的应用程序中有2个线程可以正常工作,除非它们将在关闭或中止后继续占用相当大量的处理器。这就是其中一个循环与一些主要声明一起的样子。

Dim Thread1 As System.Threading.Thread
Dim ThreadRunning As Boolean
Dim Thread1Running As Boolean = False

Sub Something()
    While True
        If ThreadRunning = True Then
            Try
                ...Actions which don't necessarily affect the thread
            Catch ex As Exception
            End Try
        ElseIf ThreadRunning = False Then
            If Thread1Running = True Then
                Thread1Running = False
                Thread1.Abort()
            Else
            End If
        End If
    End While
End Sub

以下是我用来启动帖子的代码。

Thread1Running = True
Dim Thread1 As New System.Threading.Thread(AddressOf Something)
Thread1.IsBackground = True
Thread1.Priority = ThreadPriority.Lowest
Thread1.Start()

这是我用来停止线程的代码。

ThreadRunning = False

线程中的操作需要线程,因为定时器对于任务来说太慢(即使间隔为1毫秒)。除了我中止线程时,操作执行得很好。在这种情况下,线程将关闭,并且该程序的CPU使用率将从大约25%变为0%,但随后会因CLR错误而崩溃。当我从sub外部中止线程时,它仍会使程序CPU使用率保持在25%,这正是我试图避免的。所以我的主要问题是:是否有可能关闭线程并在以后重新打开它而不会崩溃,因此当它关闭时它不会消耗25%的CPU(或其他一些相当高的CPU性能) ?如果这不是足够的信息,我会提供更多信息,但我认为这就足够了......希望如此。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

这是我找到的解决方案。

While True
        If ThreadRunning = True Then
            Try
                ...Code stuff
            Catch ex As Exception
            End Try
        ElseIf ThreadRunning = False Then
            Exit While
        End If
    End While
Exit Sub

显然以这种方式检查它使得1.线程不会挂起。 2.它完全退出线程并阻止它在关闭时使用CPU。 3.它允许通过与上面所示相同的方法重用线程。