异步串口readFile 有延迟 OverLapped不起作用

dangjun2011 2016-12-14 03:59:46
问题如题,OverLapped不起作用
我在读串口的时候,发现从数据发给下位机,到readfile接收到数据,中间都要平均50毫秒的延迟,如果我不用超时ReadIntervalTimeout 设置为0xFFFFFFFF,另外另个读超时设置为0,readfile又会一直读。现象跟readOverLapped事件不起作用一样,请大神指点,
一下是我读串口线程,和超时参数设置

COMMTIMEOUTS CommTimeouts;
CommTimeouts.ReadIntervalTimeout = 1;
CommTimeouts.ReadTotalTimeoutMultiplier = 0;
CommTimeouts.ReadTotalTimeoutConstant = 0;
CommTimeouts.WriteTotalTimeoutMultiplier = 0;
CommTimeouts.WriteTotalTimeoutConstant = 0;
if (!SetCommTimeouts(hdSerialPort, &CommTimeouts))

UINT ReadThreadFun(LPVOID pParam)
{
while(bDevOpen)
{
//设置事件为无效状态
ResetEvent(readOverLapped.hEvent);
if(hdSerialPort!= INVALID_HANDLE_VALUE)
{
DWORD readBytesCnt = 0;
UCHAR tmpSerialData[512] = {0};
ReadFile(hdSerialPort, tmpSerialData, sizeof(tmpSerialData), &readBytesCnt, &readOverLapped);

////等待事件触发
WaitForSingleObject(readOverLapped.hEvent, INFINITE);

if(hdSerialPort== INVALID_HANDLE_VALUE || !bDevOpen)
continue;

//获取读取的长度
DWORD readLen = 0;
GetOverlappedResult(hdSerialPort, &readOverLapped, &readLen, FALSE);
if(readLen > 0)
{
//处理数据
}
}
else
{
//等待事件触发
WaitForSingleObject(readOverLapped.hEvent, INFINITE);
}
}
return 0;
}
...全文
701 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
用户 昵称 2016-12-17
  • 打赏
  • 举报
回复
引用 2 楼 Hanford 的回复:
发数据之前开始计时的,还是发数据后开始计时的?串行通讯很慢,发送数据本身就很耗时。波特率9600一秒发送800个字符,发送一个字符就要耗时75毫秒。
你说的都对,就是举例的数据错了,前面一秒800个字符,后面一个字符75毫秒。
zgl7903 2016-12-16
  • 打赏
  • 举报
回复
Hanford 2016-12-15
  • 打赏
  • 举报
回复
发数据之前开始计时的,还是发数据后开始计时的?串行通讯很慢,发送数据本身就很耗时。波特率9600一秒发送800个字符,发送一个字符就要耗时75毫秒。
Hanford 2016-12-15
  • 打赏
  • 举报
回复
50毫秒的延时,你是用什么函数测得的?千万不要用GetTickCount,因为这个函数的时间误差就是几十毫秒。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧