[問題] Win7 mingw COM program
開發平台(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
04/05 14:17, 1F
→
04/05 14:18, , 2F
04/05 14:18, 2F
→
04/05 14:19, , 3F
04/05 14:19, 3F
是否整份要看後面paser,想要的是有資料就回傳,
設成5000是要突顯他沒有立刻回傳,設成100,會快很多沒錯,
但我還有另一個 thread 在做事,有順序性,想要即時
→
04/05 14:37, , 4F
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
04/05 17:02, 7F
→
04/05 17:02, , 8F
04/05 17:02, 8F
→
04/05 17:03, , 9F
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
04/05 17:17, 10F
→
04/05 17:17, , 11F
04/05 17:17, 11F
※ 編輯: ck49 (118.167.218.243), 04/05/2016 21:52:43
→
04/05 21:56, , 12F
04/05 21:56, 12F
→
04/05 23:02, , 13F
04/05 23:02, 13F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章