jiki119 发表于 2014-10-10 09:34:22

VC6多线程数据接收实例代码

//有数据进来,显示之
DWORD__stdcall Thread_USB_Read(LPVOID lpPara)
{
CUsbhidtestDlg *pDlg=(CUsbhidtestDlg *)lpPara;

//unsigned char receivebuf;
//unsigned long NumberOfBytesReaded;

        if (pDlg->HidDev.write_errcount)//设备已丢失!::有效果,但是反应慢
        {
        pDlg->SetSend_false();
    pDlg->Kill_Timer();

        }

while(pDlg->usb_Thread!=NULL)
{
       
        if ( pDlg->bExit) break;
       
        BYTE str={0};
        DWORD len=0;
        DWORD err,p_total;
        CString cstr,sn,c,sz_info="";
   
        UINT i;
        UINT icount=0;

   HJ_EVENT *pHJ;
   
        for (i=0;i<65;i++) str='\0';

        if(pDlg->HidDev.ReadHid(str,&len,&err))
        {
                cstr="USB接收数据::\r\n";

        if(len==65) len=64;//滤除最后一个字符

        if ( (strcmp(pDlg->str_lastcmd,(char *)":I")==0)&&(str==':' && str=='I'))
        {
        sz_info="\r\n\r\n发现芯片:";
        if (strncmp((char *)&str,(char *)"EF17",4)==0) sz_info+="Winbond W25Q128";
        else
    if (strncmp((char *)&str,(char *)"C816",4)==0) sz_info+="GD 25Q64";
        sz_info+="\r\n设备ID号:";
        sz_info+=(char *)&str;
    ///pDlg->GetDlgItem(IDC_EDIT1)->SetWindowText(sz_info);
//        break;
        }

        if( (pDlg->LastCmd_index==3) &&str==':'&& str=='b' )
        {
    pHJ=(HJ_EVENT *)&str;
    p_total=pHJ->jh+(pHJ->hl<<16);
        sz_info.Format("\r\n共有记录:%d条\r\n",p_total);
        //(pDlg->GetDlgItem(IDC_EDIT1))->SetWindowText(cstr);

        pDlg->LastCmd_index=0;
//        break;
        }

       

                CButton *p;
      p=(CButton *)pDlg->GetDlgItem(IDC_CHECK_BIN);

                if(p->GetCheck())//16进制显示BCD
                {
                        sn="";
                        for(i=0;i<len;i++)
                        {
                                c.Format(" %02X",(int)str);
                                sn+=c;
                                icount++;
                                if (icount>=32)
                                {
                                        icount=0;

                                        p=(CButton *)pDlg->GetDlgItem(IDC_CHECK_RETURN);
                                        if(p->GetCheck())
                                        {
                                                c="\r\n";
                                                sn+=c;
                                        }
                                }
                        }
                cstr+=sn;

                pDlg->g_rec_str+=sn;
                }
                else
                {
                cstr+=str;
      pDlg->g_rec_str+=cstr;
                }

                p=(CButton *)pDlg->GetDlgItem(IDC_CHECK_PAUSE);
                if(!p->GetCheck())
      pDlg->GetDlgItem(IDC_EDIT1)->SetWindowText(cstr+sz_info);//GetDlgItem(IDC_EDIT_REC)->SetWindowText(pDlg->g_rec_str);

                pDlg->PutReceive_Count();
                //pDlg->AddToInfOut(cstr,TRUE,TRUE);
        }
}
return 0;
}

kelvin.zh 发表于 2014-10-10 09:46:47

谢谢,MARK了,留作参考

江南雨絮 发表于 2014-10-10 10:00:34

MARK一下

jiki119 发表于 2014-10-10 11:59:01

写完了,终于理解了,API串口读数据的实现思路啦。
可惜一直没实现。

tiger2023 发表于 2014-11-8 15:43:12

楼主如果方便的话把整个文件传上来吧 这样看着挺累的

s1j2h3 发表于 2014-11-8 21:07:03

mark      
页: [1]
查看完整版本: VC6多线程数据接收实例代码