这里以线程监听串口数据,实现串口数据的自动接收为例进行说明:
首先,线程监听需要一个线程函数:(DWORD WINAPI)
UINT CSerialDAWDlg::ThreadFunc(LPVOID pParam){
COMSTAT ComStat;
DWORD dwErrorFlags = 0;
DWORD wCount = 0;
CString str;
while(1){
ClearCommError(hCom,&dwErrorFlags,&ComStat);
wCount = ComStat.cbInQue;
if(wCount > 1) {
::SendMessage(::AfxGetMainWnd()->m_hWnd,WM_READCOMM,1,0);
//其中最后两位参数被传送到WM_READCOMM事件绑定的响应函数上
}
}
Sleep(100);
return 1;
}
一般情况下,线程函数并不用于事件的处理,多用于消息的发送,如上。当判断有数据传来时if(wCount > 1),则发送WM_READCOMM,通知有数据传来并接收到数据
此处