异步串口readFile 有延迟 OverLapped不起作用
问题如题,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;
}