首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过ReadFile从串口读取非常慢

通过ReadFile从串口读取非常慢
EN

Stack Overflow用户
提问于 2019-02-18 13:45:20
回答 2查看 659关注 0票数 2

我使用Win32 API从串口读取数据:

代码语言:javascript
复制
DWORD numRead = 0;
ReadFile(mPortHandle, mReceiveBuffer.get(), mReceiveBufferSize, &numRead, nullptr);

这个调用需要非常长的:129 to才能准确(通过QueryPerformanceCounter测量)。

我用几种不同的硬件设备进行了测量:

  • 带FTDI芯片组的USB适配器
  • 带多产芯片组的USB适配器
  • PCI快速RS232卡
  • 主板上串口

这些设备中的每一个都给了我同样的延迟:129 me。因此,我不认为这是硬件或驱动程序的错误(每个设备应该使用一个完全不同的驱动程序,对吗?)

我也摆弄着暂停,但这并没有改变任何事情。

还能是什么?

EN

回答 2

Stack Overflow用户

发布于 2019-02-19 08:01:40

好的,问题解决了:-)

直到现在,我都是这样设置超时的:

代码语言:javascript
复制
COMMTIMEOUTS timeouts;
timeouts.ReadIntervalTimeout = 1;
timeouts.ReadTotalTimeoutMultiplier = 1;
timeouts.ReadTotalTimeoutConstant = 1;
timeouts.WriteTotalTimeoutMultiplier = 1;
timeouts.WriteTotalTimeoutConstant = 1;

不工作。如果我只设置常量,它可以工作:

代码语言:javascript
复制
COMMTIMEOUTS timeouts;
timeouts.ReadIntervalTimeout = 0;
timeouts.ReadTotalTimeoutMultiplier = 0;
timeouts.ReadTotalTimeoutConstant = 1;
timeouts.WriteTotalTimeoutMultiplier = 0;
timeouts.WriteTotalTimeoutConstant = 0;

现在,ReadFile在1ms内返回。

票数 2
EN

Stack Overflow用户

发布于 2019-02-18 14:03:32

可能是因为您总是通过指定接收缓冲区的总大小来读取文件。

接收缓冲区大小大吗?

如果您为DataReceived事件注册了一个事件处理程序,并且只读取到达设备驱动程序缓冲区中的数据,则额外的等待时间将减少。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54748689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档