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' /如何退出後臺線程。 –