阅读:853回复:0
多线程串口通讯问题
我做了两个读写串口的线程,目的是先写串口,然后从串口读数据,然后再写再读,一直下去。为什么我们调试的时候写线程完毕,再读一次的时候程序就不走了呀!我的代码如下:
hEventWrite = CreateEvent(NULL,FALSE,FALSE,NULL); hEventRead = CreateEvent(NULL,FALSE,FALSE,NULL); SetEvent(hEventWrite); AfxBeginThread(ThreadWrite,NULL); AfxBeginThread(ThreadRead,NULL); UINT ThreadWrite(LPVOID pParam) { while(1) { WaitForSingleObject(hEventWrite,INFINITE); rewrite: switch(code) { case 0x02: { UpgradeInfo upgradeinfo={NO2,0x0500,0x0000,0x0000,0x00}; length1=tagFile.GetLength(); upgradeinfo.filesize=(int)length1; unsigned char *p=(unsigned char*)&upgradeinfo ; long size=sizeof(upgradeinfo)-sizeof(BYTE); sum1=0xAA; while(size--) { sum1+=*p; p++; } *p=sum1; fState = WriteFile(m_hCom, (void*)&upgradeinfo, sizeof(upgradeinfo), &length, NULL); break; } case 0x05: { ReReciveSize rereceivesize={NO5}; fState = WriteFile(m_hCom, (void*)&rereceivesize, sizeof(rereceivesize), &length, NULL); break; } case 0x08: { GoHome gohome={NO8}; fState = WriteFile(m_hCom, (void*)&gohome, sizeof(gohome), &length, NULL); break; } } if(!fState) { dwError=GetLastError(); goto rewrite; } else { if(code==0x08) { delete Write; delete Read; tagFile.Close(); CloseHandle(m_hCom); m_hCom = NULL; } } SetEvent(hEventRead); } return 0; } UINT ThreadRead(LPVOID pParam) { while(1) { WaitForSingleObject(hEventRead,INFINITE); fState = ReadFile(m_hCom, gReadBuf, 6, &length, NULL); if(!fState) { dwError=GetLastError(); AfxMessageBox("读取设备返回信息失败!"); } } SetEvent(hEventWrite); return 0; } |
|