我有這些控制按鈕(Windows.Forms的):如何終止/退出/中止舊線程工作並重新啓動程序?
Start/Restart
| Pause
| Continue
一旦Start
被按下,創建threadPool[workerThreadsCount]
,ManualResetEvent mre
設置爲mre.Set()
和線程開始做他們的工作。在一些僞代碼中:
threadStartingPoint() {
int index = 0;
while(index !== someMaxCondition)
... // grab some data to work on
lock(_lock) { // lock index, so one access at a time
index += index;
}
... // do some stuff
_mre.WaitOne(); // Pause if button Pause is pressed.
}
}
工作線程像上面的例子一樣工作在循環中。現在如果我按pause
,一切停止在_mre.Wait();
位置。用continue
我可以使用mre.Set()
打開大門,一切正常。現在的問題是當我Pause
,我想用戶在Continue
或Restart
之間選擇。 Restart
的問題是我不知道如何告訴我的線程退出while loop
。因爲如果我只是設置mre.Set()
並創建新線程,一段時間以前,舊線程仍然可以使用舊數據循環。
有什麼建議嗎?
您需要使用具有超時值的'WaitOne'的重載。然後在while測試條件下,測試一些暫停或退出條件。 – GreatAndPowerfulOz
fyi'index'是線程本地的,你不需要鎖定它,因爲只有一個線程可以觸摸它。 –