[問題] Timer、Thread
我在已經吃掉許多資源的程式下,想要定期接收RS232的資料
但是RS232要求必須在40ms接收2個Com Port的資料
處理速度卻慢了一些,無法在那麼短的時間處理
1. timer
單線程,我使用timersetevent配合timeBeginPeriod,
即使我調高他的Priority為最高,但他還是和程式是同一個thread
因此,不是timer大量吃掉程式的資源,就是程式導致timer不夠快
目前是使用同一個timer一次抓兩個comport,所以一個comport傳送接收必須20ms內
2. thread
目前作法是拉兩條thread,每個comport一個thread,
但由於兩條的Priority都調最高,所以會導致彼此互搶資源
另外,使用thread不斷收資料,因此是寫了一個while,搭配sleep
sleep也是非常不準....即使使用了timeBeginPeriod,仍不夠快
補充:今天使用一條thread,一次收兩個comport的資料,效果好很多
不過使用ClearCommError判斷隊方的parity是否有切換成MARK
總是得sleep 5ms以上才會很準,不然很容易判斷錯誤
常因為要sleep,導致抓資料的速度太慢
3. 多線程timer
有查到.net有個system.threading.timer,但是程式是mfc,卻無法使用
很頭痛,不知道大家在處理上面有什麼更好得方法嗎?
有人建議過使用mutli-process,不過又怕os不斷的搬資料,反而更慢
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.22.144.222
→
02/28 17:58, , 1F
02/28 17:58, 1F
→
02/28 21:12, , 2F
02/28 21:12, 2F
→
02/28 21:13, , 3F
02/28 21:13, 3F
※ 編輯: clarkman 來自: 125.230.11.74 (02/28 21:22)
→
03/01 02:26, , 4F
03/01 02:26, 4F
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 1 之 4 篇):
Programming 近期熱門文章
PTT數位生活區 即時熱門文章