这是232串口发送数据的一段
//发送数据
void CSR232Dlg::OnButton1() 
{
// TODO: Add your control notification handler code here
UpdateData(TRUE); //读取编辑框内容
//remove("1.txt"); //删除文件1.txt
//DeleteFile("1.txt");
//rename("1.txt","2.txt");//把1.txt改成2.txt;

if(m_S16View.GetCheck())
{
  CString StrData,Strs;
  StrData.Format("%s",m_SData); 
  StrData.Replace(" ","");
  CByteArray hexdata;   for (int i=0;i<StrData.GetLength();i+=2)
  {

Strs=StrData.Mid(i,2);
//AfxMessageBox(Strs);
//int len=String2Hex(m_SData,hexdata);  //此处返回的len可以用于计算发送了多少个十六进制数
int len=String2Hex(Strs,hexdata);
m_ctrlComm.SetOutput(COleVariant(hexdata));  //发送十六进制数据
    for(int j=0;j<m_DTms;j++)
  Sleep(1);
  }
}
else 
m_ctrlComm.SetOutput(COleVariant(m_SData));//发送ASCII字符数据
}发送的同时还监测收数据,可是当我在for循环中用了AfxMessageBox后就可以在发送的中间也能收到对方发过来的数据,如果不加AfxMessageBox则只有在for循环结束后才可以收到对方的数据,而对方的数据是在我这边发送的两个数据的中间时间发送过的。。
好像只有中止一下for语句,才可以进行收,否则程序就一直在执行for语句,不能执行别的操作,有什么办法可以实现在语句中加AfxMessageBox的功能。。

解决方案 »

  1.   

    线程,或者Timer,Sleep没有用,别听他的 :)
      

  2.   

    TO:fzd999
    用timer,怎么用,是用timer来代替for吗??
      

  3.   

    不用线程也可以,在你的for循环中加一个消息泵就可以了;
      

  4.   

    AfxMessageBox会中断当前线程运行中的函数,直到AfxMessageBox返回!
      

  5.   

    TO:lzzqqq;你可得小心点,没牙了怎么过年呀;
    俺才刚刚开始学VC吗,大家可以笑话我,但一定要帮助我,因为我会谢谢你们哟。。
      

  6.   

    菜鸟好象感觉只有有了窗口,才能接收SELECT_READ等消息