WriteFile(hCom,m_send,dwCount,&dwCount,NULL);
ReadFile(hCom, pData, (DWORD)nLength, &dwNumRead, NULL);WriteFile与ReadFile WriteFile写入串口后怎么才能判断是否有返回值,如果立即ReadFile有时是返回不了值,怎么处理?即 WriteFile需要的写入成功或失败才返回,而ReadFile如果太快就取不了,WriteFile执行后的结果.
怎么处理,是否有等待WriteFile有返回结果的处理办法????
ReadFile(hCom, pData, (DWORD)nLength, &dwNumRead, NULL);WriteFile与ReadFile WriteFile写入串口后怎么才能判断是否有返回值,如果立即ReadFile有时是返回不了值,怎么处理?即 WriteFile需要的写入成功或失败才返回,而ReadFile如果太快就取不了,WriteFile执行后的结果.
怎么处理,是否有等待WriteFile有返回结果的处理办法????
WriteFile后使用同步读取方式调用ReadFile。
GENERIC_READ | GENERIC_WRITE, // 读写方式
0, // 共享方式:独占
NULL, // 默认的安全描述符
OPEN_EXISTING, // 创建方式
0, // 不需设置文件属性
NULL); // 不需参照模板文件这样创建的hCOM
COMMTIMEOUTS timeouts = { // 串口超时控制参数
1000, // 读字符间隔超时时间: 100 ms
1, // 读操作时每字符的时间: 1 ms (n个字符总共为n ms)
500, // 基本的(额外的)读超时时间: 500 ms
100, // 写操作时每字符的时间: 1 ms (n个字符总共为n ms)
500}; // 基本的(额外的)写超时时间: 100 ms================================
SetCommTimeouts(hCom, &timeouts); // 设置超时但还是在WriteFile并没有返回值的时候,ReadFile就开始在读取了.有没有办法判断,WriteFile是否已经有返回值?返回的时候有多少种状态?如正在执行,执行超时....?
读取之前,用PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR);清空缓冲。
如果ReadFile PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR); 还有返回值吗?ReadFile 是否是读的WriteFile写后的结果?如OK ERROR
ReadFile是从串口中读取数据,这个数据是另一端设备返回来的数据,并不是读取WriteFile返回值。必须另一端有软件或者设备发出数据来,你用ReadFile才能收到数据。
还是说我没理解你的意思?
或在W和R之间加Sleep
要根据目标读取字符长度来判断sleep时间,读取越多的内容时间越长
// 把ReadFile的超时设置足够长就可以了。比如总超时时间设置为20s。
// 还可以用异步方式,等待数据到达事件。
还可以用异步方式,等待数据到达事件 这种晚好,WriteFile后,一定要等待数据到达,不管是Error或是OK怎么Write Code???