Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 串行端口:ReadFile和CloseHandle_C++_Windows_Api_Serial Port_Readfile - Fatal编程技术网

C++ 串行端口:ReadFile和CloseHandle

C++ 串行端口:ReadFile和CloseHandle,c++,windows,api,serial-port,readfile,C++,Windows,Api,Serial Port,Readfile,我想读取串行端口的传入数据并对其进行处理(Windows:native C++)。但我有两个问题: 1-我应该将nNumberOfBytesToRead放入什么: 如果我将50和40个字节放入,ReadFile将不会返回。因为它还需要10个字节。如果我输入1,我的应用程序将不会得到优化。最好的号码是多少?我该怎么办 2-当我想退出我的应用程序,如果没有数据通过串行端口,ReadFile将被锁定而不返回。所以我无法使用CloseHandle正确关闭它。如何在通过串行端口等待数据时强制ReadFil

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

1-我应该将nNumberOfBytesToRead放入什么:

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


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

1-没有最佳数字。您最好使用另一种IO策略,例如重叠IO,从端口读取数据


2-在这种情况下,您可以而且应该使用CloseHandle调用关闭它。执行此操作时,ReadFile或其他阻塞API(涉及刚刚关闭的句柄)上阻塞的任何线程都将被唤醒,并收到失败的结果代码。

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

是的,另一个可行的选择——我已经忘记了这个。
ReadFile( hCom, buffer, nNumberOfBytesToRead, &read, NULL );