看板 Programming 關於我們 聯絡資訊
我在已經吃掉許多資源的程式下,想要定期接收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
fissh:你接收/傳送的資料量是幾byte? baudrate是? 61.229.30.165 02/28 17:58
clarkman:資料量不一定,有1~70幾byte都有 125.230.11.74 02/28 21:12
clarkman:baudrate 19200 125.230.11.74 02/28 21:13
※ 編輯: clarkman 來自: 125.230.11.74 (02/28 21:22)
piopoip:試看看IO completion port 61.64.211.17 03/01 02:26