[問題] Timer、Thread

看板Programming作者 (涼雨)時間15年前 (2010/02/28 16:13), 編輯推噓0(004)
留言4則, 3人參與, 最新討論串1/4 (看更多)
我在已經吃掉許多資源的程式下,想要定期接收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
你接收/傳送的資料量是幾byte? baudrate是?
02/28 17:58, 1F

02/28 21:12, , 2F
資料量不一定,有1~70幾byte都有
02/28 21:12, 2F

02/28 21:13, , 3F
baudrate 19200
02/28 21:13, 3F
※ 編輯: clarkman 來自: 125.230.11.74 (02/28 21:22)

03/01 02:26, , 4F
試看看IO completion port
03/01 02:26, 4F
文章代碼(AID): #1BYYMx_w (Programming)
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 1 之 4 篇):
文章代碼(AID): #1BYYMx_w (Programming)