各位大侠,请教一下;
我用MSComm发送和接收数据,实现了按钮的方式,发送一次接收一次,但是我想循环的实现10000次,
加入for循环后,发现循环发送的数据,一次就全部接收完毕了,请问有什么方式能实现我要求的功能么
附:void CPCcomtestDlg::OnCommMscomm1()
{
if(m_mscomm.get_CommEvent()==2) 
      { 
        
        variant_inp=m_mscomm.get_Input(); 
        safearray_inp=variant_inp; //
        len=safearray_inp.GetOneDimSize(); 
        for(k=0;k<len;k++)
        {safearray_inp.GetElement(&k,rxdata+k);}
        for(k=0;k<len;k++) //
        {
          char bt=*(char*)(rxdata+k); 
          strtemp.Format(TEXT("%c"),bt); //
          strtemp.Format(_T("%c"),bt);
          ShowData+=strtemp; 
         }
}按钮:
void CPCcomtestDlg::OnBnClickedButtonStart()
{    m_mscomm.put_Output(COleVariant(DataInput));}循环实现(发送接收)

解决方案 »

  1.   

    把发送的函数放到for循环里面!
      

  2.   

    #1 得分:0 回复于: 2013-01-06 12:44:11 
    把发送的函数放到for循环里面! 
      

  3.   

    大虾们,我忘了个主要的,我在发送数据时,使用了GetTickCount()函数,在接收数据时也使用了GetTickCount()函数,想得到时间差,但是不论我循环发送几次,都只得到了一个时间差,我是想得到和循环次数相同的时间差。
      

  4.   

    大虾们,我忘了个主要的,我在发送数据时,使用了GetTickCount()函数,在接收数据时也使用了GetTickCount()函数,想得到时间差,但是不论我循环发送几次,都只得到了一个时间差,我是想得到和循环次数相同的时间差。 
      

  5.   

     你用FOR循环发送,现在计算机速度非常快,而串口通信速度慢,可不是就变成一次接收了吗.你每次发送后都延时一会,比如50毫秒,这样就可以和接收的次数一样了(如果不行,就延时更长时间)
      

  6.   

    我也正在解决mscomm通讯问题,哪位大侠能帮小弟解决一下吗?源代码如下:
    //发送指令(已经将十六进制转为十进制了,这个转换是需要的吧)
    private void button1_Click(object sender, EventArgs e)
             { byte[] bytOut = new byte[9];
                 bytOut[0] = 250;
                 bytOut[1] = 250;
                 bytOut[2] = 250;
                 bytOut[3] = 1;
                 bytOut[4] = 1;
                 bytOut[5] = 0;
                 bytOut[6] = 2;
                 bytOut[7] = 229;
                 bytOut[8] = 6;
                 axMSComm2.Output = bytOut; 
     }         private void axMSComm1_OnComm(object sender, EventArgs e)
             {
                 string strIn = "";
                 byte[] bytIn;
                 object objIn;
                 int i;
                 axMSComm1.InputLen = 0;//每次读入整个缓冲区
                axMSComm1.InputMode = MSCommLib.InputModeConstants.comInputModeBinary;//输入方式为字节方式
                axMSComm1.RThreshold = 1;
                 objIn = axMSComm1.Input;//这里注意axMSComm1.Input返回的是一个object的
                bytIn = (byte[])objIn; 
                 for (i = 0; i <= (bytIn.Length - 1); i++)
                 {
                     strIn += "rn" + " " + bytIn[i].ToString("X"); //转换为16进制显示
                }
                 textBox1.Text += strIn;         }
     //打开串口
    private void button2_Click(object sender, EventArgs e)
             {
                 try
                 {
                     axMSComm1.CommPort = 3;
                     axMSComm1.InputMode =
                     MSCommLib.InputModeConstants.comInputModeBinary;
                     //用于设置或返回传输数据的类型发  
                     //此例程是通过Input属性以二进制方式检取回数据  
                     axMSComm1.PortOpen = true;
                     //打开端口   
                     axMSComm1.InBufferCount = 0;             }
                 catch
                 {
                     MessageBox.Show(e.ToString());
                 }         }
    有一个测试软件的,它在文本框输入指令是:FA FA FA 01  01 00 02  E5 06发送后收到的响应结果是:01->ACM6840-4-0200130415
    但是我已经把它转化为十进制了,也就是源代码的byte[]里面的250这些数字。可是我运行程序,文本框什么也没显示。各位能告诉我哪里有问题啊,拜谢啦。