我一直在参考以下页面https://msdn.microsoft.com/en-us/library/ff802693.aspx来创建事件驱动的串行端口。在我的初始化中,我设置了以下内容:
Status = GetCommState(hComm, &dcbSerialParams);
Status = SetCommState(hComm, &dcbSerialParams);
Status = SetCommMask(hComm, EV_RXCHAR);
在我的WinMain中,我使用WaitCommEvent来侦听要在端口上接收的数据。它看起来如下:
while(1){
if( PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
DispatchMessage(&msg);
}
else{
//SetWindowText(hStatic, "");
Status = WaitCommEvent(hComm, &dwEventMask, NULL); //Wait for the character to be received
if (Status == TRUE){
ReadFromSerialPort();
}
}
}
这样工作正常,所有数据都正在读取,因为它正在进入,我可以按下写入端口按钮,数据写入和其他东西,所以没有真正的抱怨。然而,代码基本上是美化轮询,constantlty检查WaitCommEvent的状态并在true时读取端口。我宁愿不进行轮询,只是坐在那里直到事件发生,就像微控制器中使用的中断服务路由一样。这可能使用win32吗?
感谢。