+ -
当前位置:首页 → 问答吧 → 请各位看完程序后指正

请各位看完程序后指正

时间:2011-11-28

来源:互联网

小弟是新手,下面是我写的程序,我想读取数据然后判断是否在范围内并且显示判断结果,我想读取完一个就判断并且显示,现在我写的不能实现,程序现在实现的是读取完全部的才显示结果,怎么改就变成读取一次之后判断完就显示结果,然后再读取令一个。请你指点,最好给一个一点点代码,谢谢! 
C/C++ code


                   wchar_t szOK[] = L"OK";
        wchar_t szNG[] = L"NG";
        DWORD wCount = 100;//读取的字节数
        BOOL bReadStat;
        CWnd::UpdateData();
        int i1=0,i2=0,i3=0,i4=0,i5=0,i6=0,i7=0,i8=0;    
    
        char str1[100]={0};
        double size1;
        int j1=1;
        for(j1=1;j1<4;j1++)
        {    
            Sleep(200);
            
            bReadStat=ReadFile(hCom,str1,wCount,&wCount,NULL);
            if(!bReadStat)
            {
                AfxMessageBox(L"读串口失败!");
            }

            PurgeComm(hCom, PURGE_TXABORT|
                PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
            
            
            size1 = atof(str1);
            read1 = (int)size1;
            
            if(read1>=input1&&read1<=input2)
            {
                SetDlgItemInt(IDC_READ1,read1);
                i1=1;
                SetDlgItemText(IDC_OUTPUT1,szOK);
                break;        // 用break就跳出上面的for循环了
            }
            else
            {
                SetDlgItemInt(IDC_READ1,read1);
                i1=0;
                SetDlgItemText(IDC_OUTPUT1,szNG);
            }
        }

        //Sleep(1000);        
        int j2=1;
        char str2[100]={0};
        double size2;
        for(j2=1;j2<4;j2++)
        {    
            Sleep(200);
            
            bReadStat=ReadFile(hCom,str2,wCount,&wCount,NULL);
            if(!bReadStat)
                AfxMessageBox(L"读串口失败!");
            PurgeComm(hCom, PURGE_TXABORT|
                PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);

            size2 = atof(str2);
            read2=(int)size2; 
            
            
            if(read2>=input3&&read2<=input4)
            {
                SetDlgItemInt(IDC_READ2,read2);
                i2=1;
                SetDlgItemText(IDC_OUTPUT2,szOK);
                break;        // 用break就跳出上面的for循环了
            }
            else
            {
                SetDlgItemInt(IDC_READ2,read2);
                i2=0;
                SetDlgItemText(IDC_OUTPUT2,szNG);
            }
        }

        //Sleep(1000);
        int j3=1;
        char str3[100]={0};
        double size3;
        for(j3=1;j3<4;j3++)
        {
            Sleep(200);
            bReadStat=ReadFile(hCom,str3,wCount,&wCount,NULL);
            if(!bReadStat)
                AfxMessageBox(L"读串口失败!");
            PurgeComm(hCom, PURGE_TXABORT|
                PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);

            size3 = atof(str3);
            read3=(int)size3; 
            
            if(read3>=input5&&read3<=input6)
            {    
                SetDlgItemInt(IDC_READ3,read3);
                i3=1;
                SetDlgItemText(IDC_OUTPUT3,szOK);
                break;        // 用break就跳出上面的for循环了
            }
            else
            {
                SetDlgItemInt(IDC_READ3,read3);
                i3=0;
                SetDlgItemText(IDC_OUTPUT3,szNG);
            }
        }

        //Sleep(1000);
        int j4=1;
        char str4[100]={0};
        double size4;
        for(j4=1;j4<4;j4++)
        {
            Sleep(200);
            bReadStat=ReadFile(hCom,str4,wCount,&wCount,NULL);
            if(!bReadStat)
                AfxMessageBox(L"读串口失败!");
            PurgeComm(hCom, PURGE_TXABORT|
                PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);

            size4 = atof(str4);
            read4=(int)size4; 
            
            if(read4>=input7&&read4<=input8)
            {    
                SetDlgItemInt(IDC_READ4,read4);
                i4=1;
                SetDlgItemText(IDC_OUTPUT4,szOK);
                break;        // 用break就跳出上面的for循环了
            }
            else
            {
                SetDlgItemInt(IDC_READ4,read4);
                i4=0;
                SetDlgItemText(IDC_OUTPUT4,szNG);
            }
        }

        //Sleep(1000);
        int j5=1;
        char str5[100]={0};
        double size5;
        for(j5=1;j5<4;j5++)
        {
            Sleep(200);
            bReadStat=ReadFile(hCom,str5,wCount,&wCount,NULL);
            if(!bReadStat)
                AfxMessageBox(L"读串口失败!");
            PurgeComm(hCom, PURGE_TXABORT|
                PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);

            size5 = atof(str5);
            read5=(int)size5; 
        
            if(read5>=input9&&read5<=input10)
            {    
                SetDlgItemInt(IDC_READ5,read5);
                i5=1;
                SetDlgItemText(IDC_OUTPUT5,szOK);
                break;        // 用break就跳出上面的for循环了
            }
            else
            {
                SetDlgItemInt(IDC_READ5,read5);
                i5=0;
                SetDlgItemText(IDC_OUTPUT5,szNG);
            }
        }

        //Sleep(1000);
        int j6=1;
        char str6[100]={0};
        double size6;
        for(j6=1;j6<4;j6++)
        {
            Sleep(200);
            bReadStat=ReadFile(hCom,str6,wCount,&wCount,NULL);
            if(!bReadStat)
                AfxMessageBox(L"读串口失败!");
            PurgeComm(hCom, PURGE_TXABORT|
                PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);

            size6 = atof(str6);
            read6=(int)size6; 
            
            if(read6>=input11&&read6<=input12)
            {    
                SetDlgItemInt(IDC_READ6,read6);
                i6=1;
                SetDlgItemText(IDC_OUTPUT6,szOK);
                break;        // 用break就跳出上面的for循环了
            }
            else
            {
                SetDlgItemInt(IDC_READ6,read6);
                i6=0;
                SetDlgItemText(IDC_OUTPUT6,szNG);
            }
        }
        //Sleep(1000);
        int j7=1;
        char str7[100]={0};
        double size7;
        for(j7=1;j7<4;j7++)
        {
            Sleep(200);
            bReadStat=ReadFile(hCom,str7,wCount,&wCount,NULL);
            if(!bReadStat)
                AfxMessageBox(L"读串口失败!");
            PurgeComm(hCom, PURGE_TXABORT|
                PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);

            size7 = atof(str7);
            read7=(int)size7; 
            
            if(read7>=input13&&read7<=input14)
            {    
                SetDlgItemInt(IDC_READ7,read7);
                i7=1;
                SetDlgItemText(IDC_OUTPUT7,szOK);
                break;        // 用break就跳出上面的for循环了
            }
            else
            {
                SetDlgItemInt(IDC_READ7,read7);
                i7=0;
                SetDlgItemText(IDC_OUTPUT7,szNG);
            }
        }

        i8=i1+i2+i3+i4+i5+i6+i7;
        if(i8==7)
        {
            SetDlgItemText(IDC_OUTPUT8,szOK);
        }
        else
            SetDlgItemText(IDC_OUTPUT8,szNG);


        CWnd::UpdateData(FALSE);

        // 再次开启定时器

作者: Bfg331399267   发布时间: 2011-11-28

你把所有的代码都写到一个函数里当然是一块儿显示了
你可以考虑把读取的代码放到一个独立线程中
然后想显示的时候发消息通知主窗口显示

作者: xianglitian   发布时间: 2011-11-28

做一个函数好不??循环调用,多简单。。。

作者: shen_wei   发布时间: 2011-11-28

果然需要做成函数,那读串口的部分,连续调用了那么多次,先做成函数吧。

作者: jennyvenus   发布时间: 2011-11-28

第一次接触这个 怎么弄 能给点代码吗

作者: Bfg331399267   发布时间: 2011-11-28

引用 3 楼 jennyvenus 的回复:

果然需要做成函数,那读串口的部分,连续调用了那么多次,先做成函数吧。

++

作者: loseway   发布时间: 2011-11-28