Re: [問題] 該如何等一個子函數做完事情呢?

看板C_Sharp作者 (不慌不忙)時間14年前 (2010/06/13 19:47), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串7/7 (看更多)
※ 引述《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

06/13 21:28, , 1F
剛試了真的有效,效率增加約2成,謝謝版上的高手們!!
06/13 21:28, 1F
文章代碼(AID): #1C5CLhqF (C_Sharp)
討論串 (同標題文章)
文章代碼(AID): #1C5CLhqF (C_Sharp)