串口:ReadFile和CloseHandle

时间:2014-02-10 18:00:51

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

我想读取串口的传入数据并对其进行处理(Windows:native C ++)。但我有两个问题:

1-我应该在ReadFile中将nNumberOfBytesToRead放在哪里:

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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