往串口写一段字符串后,串口另一端会发送一个反馈回来。然后自己根据这个反馈来判断是否发送下一字符串。该怎么做啊??我现在是这样做的
CMYDlg::UpdateFiles()
{
WritePort("update");
if (GetOneChar(Inbuff) == 0x11)
WritePort(updateHead);
if (GetOneChar(Inbuf) == 0x03)
WritePort(updateFile);
}
CMYDlg::OnComm函数中这样处理:
if(m_ctrlComm.GetCommEvent()==2) 
{                    
variant_inp=m_ctrlComm.GetInput(); 
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++) 
    {
    BYTE bt=*(char*)(rxdata+k); 
    InBuf[iend++ &(1024-1)] = bt;
    }
}问题是它总是执行完UpdateFiles()函数后再执行OnComm(),因为GetOneChar(Inbuf)时不能收到反馈,而非重启程序的第二次执行时,则有反馈(应该是前一次留下的)
各位大侠说说你们的思路呢,谢谢

解决方案 »

  1.   

    直接在OnComm函数中处理,收到数据后判断内容,然后发送.
      

  2.   

    你这个UpdateFiles()函数时怎么执行的?在那里调用啊?
      

  3.   

    直接在OnComm函数中处理的话,太缺乏灵活性了。不是一步两步的问题啊
      

  4.   

    主程序的OnButtonSend()函数中
      

  5.   

    你延迟一下试试,串口的传送速度没有程序执行的块,你发送出去之后就去收当然收不到了,
    WritePort("update");
    Sleep(500)//延迟500ms
    if (GetOneChar(Inbuff) == 0x11)
    WritePort(updateHead);
    if (GetOneChar(Inbuf) == 0x03)
    WritePort(updateFile);
      

  6.   

    我do{}while();都试过了,Sleep()有过5s
      

  7.   

    突然发现直接获取buffer而不是通过OnComm的话好像可以,可这样的话,我要OnComm干嘛
      

  8.   

    WritePort("update");
    Sleep(500)//延迟500ms
    if (GetOneChar(Inbuff) == 0x11)
    WritePort(updateHead);
    if (GetOneChar(Inbuf) == 0x03)
    WritePort(updateFile);
      

  9.   

    mailto: [email protected]
    谢了
      

  10.   

    流程错误,用sleep的话,要知道信息返回的最大可能时间,sleep()的时间要略大于这个时间
      

  11.   

    控件收到字符有个触发消息的,把你的语句写到触发消息里面
    if (GetOneChar(Inbuff) == 0x11)
    WritePort(updateHead);
    if (GetOneChar(Inbuf) == 0x03)
    WritePort(updateFile);
      

  12.   

    不晓得:可不可以在OnComm()函数中先Sleep一下,再接受和处理呢?可这段时间内再有OnComm事件怎么办?还有没有触发?哇……好乱,来个高手捋一捋吧?tks!!!