【问题标题】:serial port: ReadFile and CloseHandle [duplicate]串口:ReadFile 和 CloseHandle [重复]
【发布时间】:2014-02-10 18:00:50
【问题描述】:

我想读取串行端口的传入数据并处理它们(Windows:本机 C++)。但是我有两个问题:

1- 我应该在ReadFile 中输入 nNumberOfBytesToRead 的内容:

ReadFile( hCom, buffer, nNumberOfBytesToRead, &read, NULL );

如果我把 50 和 40 字节到达,ReadFile 将不会返回。因为它需要多 10 个字节。如果我输入 1,我的应用程序将不会被优化。最好的数字是多少?我该怎么办?

2- 当我想退出我的应用程序时,如果没有数据通过串口,ReadFile 将被锁定而不返回。所以我无法使用 CloseHandle 正确关闭它。如何在通过串口等待数据时强制 ReadFile 返回?

【问题讨论】:

标签: c++ windows api serial-port readfile


【解决方案1】:

1 - 没有最好的数字。您最好使用另一种 IO 策略,例如重叠IO,从端口读取数据。 Here's some sample code.

2 - 在这种情况下,您可以并且应该使用 CloseHandle 调用来关闭它。当您这样做时,ReadFile 或其他涉及您刚刚关闭的句柄的阻塞 API 上阻塞的线程将在接收失败的结果代码时唤醒。

【讨论】:

    【解决方案2】:

    当您打开端口时,您应该使用 SetCommTimeouts。读取超时类似于延迟设置:如果传入数据暂停,ReadFile 在返回之前应该等待多长时间。调整缓冲区大小和超时时间,以适应在处理所获得的任何内容之前愿意等待的毫秒数。

    【讨论】:

    • 是的,另一个可行的选择 - 我忘了这个。
    猜你喜欢
    • 2019-03-26
    • 1970-01-01
    • 2012-02-11
    • 2016-11-09
    • 1970-01-01
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多