作者WPC001 (突然覺得自己是孤獨的...)
站內Programming
標題Re: [問題] Timer、Thread
時間Thu Mar 11 00:13:23 2010
※ 引述《clarkman (涼雨)》之銘言:
: 我在已經吃掉許多資源的程式下,想要定期接收RS232的資料
: 3. 多線程timer
: 有查到.net有個system.threading.timer,但是程式是mfc,卻無法使用
: 很頭痛,不知道大家在處理上面有什麼更好得方法嗎?
: 有人建議過使用mutli-process,不過又怕os不斷的搬資料,反而更慢
: 謝謝
給你幾個hint,
1. 建議除了UI外, 額外用4個thread處理
2個是自己寫的timer, 2個是專門處理資料的
2. timer建議用64bits的HPET
3. 專門處理資料的thread, 最好有buffer
timer一把RS232資料抓到後, 立刻就丟給別的thread進行資料處理
而timer的程序也就進入睡眠狀態, 直到時間事件再次被觸發
4. 同步的問題 --> 緩衝區應該要加上Single Lock ,
但能鎖住的時間僅是資料存取的極短時間內, 運算應該要跟存取分開
不能在運算時也鎖住緩衝區
5. 資料處理完應該先檢查緩衝區是否還有資料, 如果有, 應該要繼續處理
如果沒有, 則進入睡眠, 直到再次被喚起
P.S. 提示已經很多了, 自己查資料, 就別寫信來問了 XD
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.195.1.131
推 clarkman:所以是一個負責收資料,一個負責處理資料 125.230.3.169 03/14 02:35
→ clarkman:把這兩個拆開給不同的thread嗎 125.230.3.169 03/14 02:35
→ clarkman:但是我們的機台已經跑了很吃資源的遊戲 125.230.3.169 03/14 02:37
→ clarkman:所以會把底層這個東西搶走太多,導致太慢 125.230.3.169 03/14 02:37
→ clarkman:多拉幾條thread會怕context switch更慢 125.230.3.169 03/14 02:38
推 clarkman:因為我們的機台等級不高,加上資源吃太多 125.230.3.169 03/14 02:49
→ clarkman:所以才會擔心 125.230.3.169 03/14 02:49