lijianjun714
驱动小牛
驱动小牛
  • 注册日期2006-08-24
  • 最后登录2009-09-24
  • 粉丝0
  • 关注0
  • 积分23分
  • 威望349点
  • 贡献值0点
  • 好评度162点
  • 原创分0分
  • 专家分0分
阅读:911回复:0

多线程串口通讯问题

楼主#
更多 发布于:2007-02-03 10:20
  我做了两个读写串口的线程,目的是先写串口,然后从串口读数据,然后再写再读,一直下去。为什么我们调试的时候写线程完毕,再读一次的时候程序就不走了呀!我的代码如下:

   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;
}
游客

返回顶部