串口:ReadFile 和 CloseHandle [重复]
Posted
技术标签:
【中文标题】串口:ReadFile 和 CloseHandle [重复]【英文标题】:serial port: ReadFile and CloseHandle [duplicate] 【发布时间】: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 返回?
【问题讨论】:
***.com/questions/6036716/… 【参考方案1】:1 - 没有最好的数字。您最好使用另一种 IO 策略,例如重叠IO,从端口读取数据。 Here's some sample code.
2 - 在这种情况下,您可以并且应该使用 CloseHandle 调用来关闭它。当您这样做时,ReadFile 或其他涉及您刚刚关闭的句柄的阻塞 API 上阻塞的线程将在接收失败的结果代码时唤醒。
【讨论】:
【参考方案2】:当您打开端口时,您应该使用 SetCommTimeouts。读取超时类似于延迟设置:如果传入数据暂停,ReadFile 在返回之前应该等待多长时间。调整缓冲区大小和超时时间,以适应在处理所获得的任何内容之前愿意等待的毫秒数。
【讨论】:
是的,另一个可行的选择 - 我忘了这个。以上是关于串口:ReadFile 和 CloseHandle [重复]的主要内容,如果未能解决你的问题,请参考以下文章
VS或者VC6.0编写的C语言程序,怎样能够实现串口数据的收发?