看板 C_Sharp 關於我們 聯絡資訊
※ 引述《carl71321 (Christopher)》之銘言: : MSDN上標示Thread的Suspend()、Resume()方法 : 目前已經過時了,如果在C#內想要去讓某一個使用了很多 : CPU時間的Thread暫停,待加權計算此Thread可再使用CPU : 時間後再啟動此Thread,請問可以怎麼處理呢?謝謝。 正式做法: WaitHandle / AutoResetEvent / ManualResetEvent // AutoResetEvent,必需要在你的工作 thread 和加權計算 thread 都存取的到 AutoResetEvent e = new AutoResetEvent(false); ---------------------------------- // Work thread 會長這樣 while (true) { // 這行會讓 Thread 執行到這時停下來等 e 被觸發才繼續 e.WaitOne(); // e 被觸發後會繼續執行到這,開始真正進行工作 DoWork(); } ----------------------------------- // 從你的加權 thread 觸發 e 這個 event,就可以讓 worker thread 開始活動 if (CanWork) e.Set(); ----------------------------------- 不過,有經驗的人看到上面的 while loop 應該會覺得有點問題 因為.....最後除了用 Thread.Abort() 外,你沒辦法把Thread停下來 解決的方法很多種,簡單的例如插個 flag 在每次要開始工作前檢查一下 比較正式一點的解法則是善用 WaitHandle.WaitAny() 這個 function 讓 while loop 裡的 wait 同時等多個 signal,並且把其中一個當做 quit 的訊號使用 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.72.1