我正在呼叫WriteFile将数据发送到调制解调器:
BOOL writeResult = WriteFile(m_hPort, p_message, length, &numOut, NULL);
其中:
m_hPort
是有效的HANDLE
unsigned char*
,其中包含ate0\r
int
,值为5 unsigned long
初始化为0 我偶尔会看到这种方法成功但是numOut!= length
WriteFile如何在不发送任何数据的情况下返回成功?
编辑这就是我创建句柄的方式:
HANDLE hPort = CreateFileA("\\\\.\\COM5", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
我已经检查了返回,并且它不是INVALID_HANDLE_VALUE
,这表明它是有效的。
答案 0 :(得分:1)
文档说明:
当您发送数据的速度比传输速度快时,调制解调器会有类似的行为吗?
答案 1 :(得分:1)
毕竟是硬件问题。
对转换器进行电源循环会清除硬件缓冲区,导致我们怀疑该设备的驱动程序存在问题。根据Hans的建议,我们放弃了超时,然后开始更详细地探讨错误报告。
将超时减少到合理的意义,这意味着我们能够确定缓冲区已经填满,直到他们能够“采取更多”为止!这就是为什么功率循环转换器固定它的原因(我们尝试通过工程重新布线功率并反转极性,但异常,并未解决问题)。
根本原因是一些不稳定的硬件流控制导致软件无限期地阻塞。禁用流量控制解决了这个问题。