c++ - windows ReadFile() 在读取 sizeToRead 值之前不会返回

标签 c++ c windows serial-port

在串行通信中,ReadFile 直到读取了与sizeToRead 参数一样多才返回。

这太奇怪了,因为实际上直到昨天,它都可以使用相同的代码、相同的笔记本电脑正常工作,尽管它没有收到与 sizeToRead 一样多的字节数,但返回任何字节。

但是今天我的代码出现了这样的奇怪症状。

serialHandle = CreateFile(L"\\\\.\\COM1",
    GENERIC_READ | GENERIC_WRITE,
    0,
    0,
    OPEN_EXISTING,
    FILE_ATTRIBUTE_NORMAL,
    0);

DCB serialInfo = {0};

GetCommState(serialHandle, &serialInfo)

serialInfo.DCBlength = sizeof(DCB);
serialInfo.BaudRate = CBR_19200;
serialInfo.fBinary = TRUE;
serialInfo.fParity = TRUE;          
serialInfo.fErrorChar = TRUE;
serialInfo.fNull = TRUE;
serialInfo.fAbortOnError = FALSE;   //TODO
serialInfo.ByteSize = 8;
serialInfo.Parity = SPACEPARITY;
serialInfo.StopBits = ONESTOPBIT;
serialInfo.ErrorChar = 0xFF;    

SetCommState(serialHandle, &serialInfo

ReadFile(serialHandle, buffer, numberOfBytesToRead, &numOfBytesRead, NULL)

numberOfBytesToRead 为256,所以ReadFile 得到256 字节后返回

最佳答案

ReadFile 可以根据超时在读取 numOfBytesRead 之前返回,请参阅 SetCommTimeouts。如果您尚未初始化超时设置,那么您将继承其他程序设置的任何内容。因此,为了保持一致的行为 1,您应该在打开 COM 端口时调用此 API。

关于c++ - windows ReadFile() 在读取 sizeToRead 值之前不会返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26947356/

相关文章:

c - 编译这个程序如何填满我的电脑?

java - 将 windows.h HANDLE 返回到 Java JNI

python - Windows 上没有控制台的 Cython

c++ - 处理程序是通过 XSetErrorHandler global 还是 threadlocal 设置的?

c++ - CCLabelBMFont、编码和特殊字符

c++ - 重载 vector 下标运算符取一个 char * 或 string

c++ - 使用 C++ 的 RGB 到 CMY 颜色模型

c - 在另一个 .c 文件的函数中使用函数?

c - 如何使数组中的每一列适合宾果卡的随机数?

java - FileOutputStream - 系统资源不足,无法完成请求的服务