看板 C_Sharp 關於我們 聯絡資訊
※ 引述《scottzz (無心工作,等待機會)》之銘言: : ※ 引述《liaommx (Orz)》之銘言: : : 請問一下,這個寫法雖然compiler會過, : : 可是實際點button的時候會整個卡住, : : 不知道會是甚麼原因呢? : 說明一下,AutoResetEvent 類別的Waitone方法會Hold整個Thread. : 因此,我是預設您的Timer物件是用 System.Timers.Timer 去宣告出來的 : 而非使用控制項的Timer. 因為System.Timers.Timer 類別是會每次時間 : 一到就產生一個Thread去執行Timer內部動作.因此就算主Thread被 : waitone方法所鎖住不動,但Timer還是會定時去動作的.因此只要count數 : 一到再Set時, 就能解開主Thread的鎖定繼續往下Go. 可以順勢再問一個問題嗎? 是這樣的,之前做Sap2000的Plugins,檢核橋梁的鋼箱梁Element的斷面力量, 剛好每個Element至少需匯出兩個斷面力,想說可以用BackgroundWoker來多工處理, 實驗結果雙核CPU的使用率將近99%,但只提昇約20~90%效率(4核CPU才能超過70%), 我猜應該是用BK(BackgroundWoker)時分出兩個Threads: BKa、BKb 再利用Sleep來等這兩個Worker結束以換下一個Element: while(BKa.isBusy || BKb.isBusy) Threads.Sleep(0); 看到scottzz的建議很興奮, 如果用BackgroundWorker開的子方法也可以用AutoResetEvent 來hold主Thread嗎? 效率應該會比Sleep優吧!等我有空再去試試看,如果可行先謝了! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 115.43.126.69
suny999:剛試了真的有效,效率增加約2成,謝謝版上的高手們!! 06/13 21:28