如何在Button的处理事件中,等待串口线程函数中接到某一字符
我在BUTTON事件中,通过WriteFile向一个MCU通过串口发送一个字符,然后等待MCU做一件事,
MCU处理完,会发送一个特定串表示完成或者失败。线程函数如下:
DWORD CMy8902_TestDlg::UartReadThread(LPVOID pParam)
{
BYTE Byte,ucData;
int iCounter = 0;
DWORD dwBytes;
CMy8902_TestDlg* dlg = ( CMy8902_TestDlg* )pParam;
SetCommMask (CMy8902_TestDlg::hSerial, EV_RXCHAR);
while (CMy8902_TestDlg::hSerial != INVALID_HANDLE_VALUE)
{
DWORD dwCommStatus;
WaitCommEvent(CMy8902_TestDlg::hSerial, &dwCommStatus, 0);
SetCommMask (CMy8902_TestDlg::hSerial, EV_RXCHAR);
do
{
ReadFile(CMy8902_TestDlg::hSerial, &Byte, 1, &dwBytes, 0);
if(dwBytes == 1)
{
static unsigned char len = 0;
static unsigned char checksum = 0;
static unsigned char cmd,dat;
static int state = MS_START;
ucData=Byte;
printf("%02X ", ucData);
switch (state)
{
case MS_START:
if(START_FLAG==ucData)
state++;
checksum=MS_START;
break;
case MS_COMMAND:
cmd=ucData;
checksum+=ucData;
state++;
break;
case MS_DATA:
dat=ucData;
checksum+=ucData;
state++;
break;
case MS_CHECKSUM:
if(ucData==checksum)
{
//MCU返回一条正确的回应,原本是打算发送一条自定义消息给BUTTON处理事件的
dlg->PostMessage(WM_TEST_430_EXT_PORT, cmd, dat);
}
state=MS_START;
break;
default:
state = MS_START;
break;
}
}
} while (dwBytes == 1);
}
return 0;
}
//BUTTON的代码如下:
SendCmdToMCU(cmd);//通过串口发送字符给MCU
//开始等待串口线程中的消息
MSG msg;
while(GetMessage(&msg, NULL, 0, 0))
{
if(WM_TEST_430_EXT_PORT == msg.message)//开始等待串口线程中的消息
{
break;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
实际调试时发现,程序会卡在GetMessage
这里有一个问题,如果MCU没响应,那个地方就是死循环, 实际应用中,希望如果2秒没有回应,应能跳出循环,
请大侠给点参考代码,感谢!!