0
所以我有2个线程在我的应用程序中工作正常,除了他们将继续占用相当大量的我的处理器,即使他们关闭或中止后。这就是其中一个循环与一些主要声明一起的样子。减少线程的CPU使用率
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错误而崩溃。当我从子外部中止线程时,它仍将程序CPU使用率保持在25%,这正是我试图避免的。所以我的主要问题是:是否可以关闭线程并稍后在没有崩溃的情况下重新打开线程,并且在关闭线程时不会占用CPU的25%(或某些其他相当高的CPU性能)?如果这没有足够的信息,我会提供更多,但我的事情就足够了......希望。谢谢你的帮助。
[**不要使用'Thread.Abort'!**](http://stackoverflow.com/questions/1559255/whats-wrong-with-using-thread-abort)[它是* evil * ](http://haacked.com/archive/2004/11/12/how-to-stop-a-thread.aspx/)。另外,你正在显示管理线程的所有代码,但问题在于线程*实际正在执行的*,这是你没有显示的。只是因为某个线程中的东西并不意味着它会使用更少的CPU - 它只是意味着您的GUI仍然可以正常工作(在这里)。 'while(1){}'循环仍然会完全消耗一个CPU内核。 –
我明白了。感谢您的快速回复。那么Thread.Abort有没有其他选择?至于代码,我认为它不一定会在应用程序关闭时导致应用程序崩溃。退出应用程序时关闭线程也不是问题。主要是线程正在使用这个百分比,而它们不活动或者被认为是中止/挂起。我试图找到一种方法来可能暂停他们的CPU使用/运行,直到它再次启动(我试过Thread.Abort和Thread.Suspend/Resume但都没有正常工作,或者我用它们错了)。 – MiKe34123
我认为这是两个不同的问题:1)线程CPU使用率(完全依赖于你没有显示的代码,2)'Thread.Abort' /如何退出后台线程。 –