1

我正在使用 winapi ( 在 C 中) 使用以下创建端口从 comport 读取批处理:

hSerial= CreateFile(COM5, 
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING, 
FILE_ATTRIBUTE_NORMAL |FILE_FLAG_NO_BUFFERING, 
NULL);   

然后将一批读入 Data ,它是 lengthIn long :

ReadFile(hSerial,Data,lengthIn,lengthOut,NULL)

lengthOut 表示实际读取的数据量。

我需要确保在每次迭代时实际读取 lengthIn 字节,而不是更少,我该怎么做?如何确保每次 lengthIn=lengthOut?

我认为它与创建端口时的属性有关(如 FILE_FLAG_NO_BUFFERING),但我不确定是哪一个以及如何。

4

1 回答 1

2

如果您将通信端口句柄上的超时设置得足够大,那么ReadFile在您指定的字节数被读取(或发生错误)之前,它实际上不会返回。

有关更多详细信息,请参阅有关COMMTIMEOUTS结构的文档 ( http://msdn.microsoft.com/en-us/library/windows/desktop/aa363190(v=vs.85).aspx )。

于 2013-04-08T08:30:46.527 回答