[問題] Win7 mingw COM program

看板C_and_CPP (C/C++)作者 (心動)時間10年前 (2016/04/05 13:43), 10年前編輯推噓0(0013)
留言13則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Win7 x64 MINGW 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) #include <windows.h> 問題(Question): 在讀取 COM port 時使用 ReadFile(Cport[comport_number], buf, size, (LPDWORD)((void *)&n), NULL); 時若設定 COMMTIMEOUTS Cptimeouts; Cptimeouts.ReadIntervalTimeout = MAXDWORD; Cptimeouts.ReadTotalTimeoutMultiplier = 0; Cptimeouts.ReadTotalTimeoutConstant = 5000; //5000 ms Cptimeouts.WriteTotalTimeoutMultiplier = 0; Cptimeouts.WriteTotalTimeoutConstant = 5000; //5000 ms 此設定是每五秒檢查一次,不符合需求, 例如在2秒時有資料,要等到5秒時才讀到。 若設為0,則會造成cpu耗盡的狀況, 請教是否有更好的讀取方法? 感恩 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.167.218.243 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1459835027.A.EAA.html ※ 編輯: ck49 (118.167.218.243), 04/05/2016 13:44:05

04/05 14:17, , 1F
是可以設定成收到 "1 byte" 就立刻回傳,請看 MSDN
04/05 14:17, 1F

04/05 14:18, , 2F
不過這個行為是你要的嗎? 還是你喜歡整份資料收到完?
04/05 14:18, 2F

04/05 14:19, , 3F
設成 0.1 秒 (5000 改成 100) 試試看
04/05 14:19, 3F
是否整份要看後面paser,想要的是有資料就回傳, 設成5000是要突顯他沒有立刻回傳,設成100,會快很多沒錯, 但我還有另一個 thread 在做事,有順序性,想要即時

04/05 14:37, , 4F
你的ReadFile有搭配Thread嗎?另外這個timeout是你
04/05 14:37, 4F

04/05 14:38, , 5F
在接收佇列裡面字元與字元間的等待最大間隔,超過則
04/05 14:38, 5F

04/05 14:39, , 6F
返回動作
04/05 14:39, 6F
ReadFile有另開一個 thread如下,無timeout會吃光cpu int n; while(1) { n = ReadFile(...); if (n > 0) { do_parse(...); } } ※ 編輯: ck49 (118.167.218.243), 04/05/2016 16:41:32

04/05 17:02, , 7F
這樣就設定成有資料立刻回傳,沒資料 block 住就好了
04/05 17:02, 7F

04/05 17:02, , 8F
MSDN 的說明有寫該怎麼設定
04/05 17:02, 8F

04/05 17:03, , 9F
有 parser 就好辦了,我也是傾向這種解法
04/05 17:03, 9F
請問msdn是這個網頁嗎 https://msdn.microsoft.com/en-us/library/ff802693.aspx#serial_topic4 找不太到這種設定...@@ 剛剛試了一下 設定timeout > 0 時 ReadFile 如果設定為只讀1個byte可以立刻回傳,但這樣似乎較無效率... 若設定為多個byte,未達到byte數則會等到timeout...

04/05 17:17, , 10F
要設成0就要用,waitcommevent這類去卡 thread,不然就
04/05 17:17, 10F

04/05 17:17, , 11F
要加 delay 在 thread 裡
04/05 17:17, 11F
※ 編輯: ck49 (118.167.218.243), 04/05/2016 21:52:43

04/05 21:56, , 12F
https://goo.gl/uRxJag 在這一頁,看 Remarks 那一段
04/05 21:56, 12F

04/05 23:02, , 13F
感恩啊 已經ok了
04/05 23:02, 13F
文章代碼(AID): #1N0r2Jwg (C_and_CPP)
文章代碼(AID): #1N0r2Jwg (C_and_CPP)