/**************************************线程创建*************************************************************/
if(!SetCommMask(hCom,EV_RXCHAR))
{
AfxMessageBox(L"建立掩码失败");
}
hThreadEvent=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadProcEven,&dwParam,0,&dwThreadID);
if(hThreadEvent==INVALID_HANDLE_VALUE)
{
AfxMessageBox(L"事件线程创建失败");
}
else
{
fEventRun=true;
blnOpened=true;
}
/***********************************************************************************************************/
/**************************************线程函数*************************************************************/
DWORDThreadProcEven(LPVOIDpParam)
{
BYTEah[20];
CStringmyStr;
DWORDdwRead,dwRes;
DWORDdwEvtMask,error;
while(fEventRun)
{
dwEvtMask=0;
Eol.hEvent=CreateEvent(NULL,true,false,NULL);//OVERLAPPED结构的EOL设置为无信号
WaitCommEvent(hCom,&dwEvtMask,&Eol);//等待发生EOL变为有信号
switch(dwEvtMask)
{
caseEV_RXCHAR://当输入缓冲区里有一个字符时执行读操作
{
Rol.hEvent=CreateEvent(NULL,true,false,NULL);//设置ROl为无信号
if(Rol.hEvent==NULL)
{
AfxMessageBox(L"hEvent空");
return-1;
}
if(ReadFile(hCom,&ah,5,NULL,&Rol))//读出数据放入ah中
{
if(!PurgeComm(hCom,PURGE_RXCLEAR))//清除输入缓冲区
{
error=GetLastError();
myStr.Format(_T("ERRORcoed:[%d]"),error);
AfxMessageBox(myStr);//显示错误信息
}
AfxMessageBox(L"成功读出数据1");
}
else
{
dwRes=WaitForSingleObject(Rol.hEvent,5000);//等待读操作完成
switch(dwRes)
{
caseWAIT_OBJECT_0:
{
AfxMessageBox(L"成功读出数据2");
if(!PurgeComm(hCom,PURGE_RXCLEAR))
{
error=GetLastError();
myStr.Format(_T("ERRORcoed:[%d]"),error);
AfxMessageBox(myStr);
}
}
break;
caseWAIT_TIMEOUT:
{
AfxMessageBox(L"超时");
break;
}
}
}
}
}
}
return0;
}
/************************************************************************************************************/
/************************************************关闭线程******************************************************/
fEventRun=false;
CloseHandle(hThreadEvent);
/************************************************************************************************************/
调试的时候电脑老是死机
调试的时候360这个数一直涨一直涨到99%然后就蓝屏了
这是什么原因啊?????
分 -->
|