我正在阅读蓝牙COM端口,从微控制器获取数据。 初始化端口后,我使用它来读取端口:
while(1)
if(WaitCommEvent(com_hnd, &dwEventMask, NULL))
这样可以正常工作,但如果我关闭COM端口,程序将在此循环中永远等待,而不会检测到COM端口消失的事实(我有一个其他的if if(),我检查错误)。
如何查看是否仍然打开?
答案 0 :(得分:2)
正如评论中已经建议的那样,您可能需要一些外部方法来停止等待,就像事件+ WaitForMultipleObjects()一样。您还可以等待从CreateFile获得的实际COM端口句柄。
你真的需要使用WaitCommEvent吗?据我所知,如果您使用握手信号和其他此类奇怪的东西,您应该只需要该功能。如果您只对数据感兴趣,可以使用ReadFile。根据我的经验,这个功能更可靠。
我使用过类似的COM端口设备,并且发现它们已断开连接的最强大的方法似乎是检查ReadFile的结果:
BOOL result;
result = ReadFile(...);
if(result == FALSE)
{
DWORD last_error = GetLastError();
if(last_error == ERROR_OPERATION_ABORTED) // disconnected ?
{
close(); // close the port
}
}
我当然不确定这是否适用于您的具体情况,但我在一些生产代码中使用此方法,最终导致多个糟糕的USB转串口适配器。