我使用Win32 API从串口读取数据:
DWORD numRead = 0;
ReadFile(mPortHandle, mReceiveBuffer.get(), mReceiveBufferSize, &numRead, nullptr);这个调用需要非常长的:129 to才能准确(通过QueryPerformanceCounter测量)。
我用几种不同的硬件设备进行了测量:
这些设备中的每一个都给了我同样的延迟:129 me。因此,我不认为这是硬件或驱动程序的错误(每个设备应该使用一个完全不同的驱动程序,对吗?)
我也摆弄着暂停,但这并没有改变任何事情。
还能是什么?
发布于 2019-02-19 08:01:40
好的,问题解决了:-)
直到现在,我都是这样设置超时的:
COMMTIMEOUTS timeouts;
timeouts.ReadIntervalTimeout = 1;
timeouts.ReadTotalTimeoutMultiplier = 1;
timeouts.ReadTotalTimeoutConstant = 1;
timeouts.WriteTotalTimeoutMultiplier = 1;
timeouts.WriteTotalTimeoutConstant = 1;此不工作。如果我只设置常量,它可以工作:
COMMTIMEOUTS timeouts;
timeouts.ReadIntervalTimeout = 0;
timeouts.ReadTotalTimeoutMultiplier = 0;
timeouts.ReadTotalTimeoutConstant = 1;
timeouts.WriteTotalTimeoutMultiplier = 0;
timeouts.WriteTotalTimeoutConstant = 0;现在,ReadFile在1ms内返回。
发布于 2019-02-18 14:03:32
可能是因为您总是通过指定接收缓冲区的总大小来读取文件。
接收缓冲区大小大吗?
如果您为DataReceived事件注册了一个事件处理程序,并且只读取到达设备驱动程序缓冲区中的数据,则额外的等待时间将减少。
https://stackoverflow.com/questions/54748689
复制相似问题