关于#MFC#的循环发送指令问题,如何解决?

MFC 串口循环发送指令问题
问题描述:
希望点击开始运动,进入OnStart函数以后,电机转动一次,就给传感器发送一次指令,并获取传感器的返回值写入文件中。但是目前发现要等到OnStart函数执行结束后,才给传感器发送指令。也就是m_ctrlComm.put_Output(COleVariant(hexdata0));真正起作用的次数只有1次,请问该怎么改进才能让程序连续发送命令并接收数据?
ps: 去掉for循环后数据收发正常

void CSingle_move_Dlg::OnStart()                //启动运动
{
    //传感器输入值
    CByteArray hexdata0;
    hexdata0.Add(0x77);
    hexdata0.Add(0x04);
    hexdata0.Add(0x00);
    hexdata0.Add(0x04);
    hexdata0.Add(0x08);
    for (int i = 0; i < 10; i++)
    {
        ZAux_Direct_Single_Move(g_handle, m_nAxis, 0.5); //电机运动
        m_ctrlComm.put_Output(COleVariant(hexdata0));  //向串口发送指令
        Sleep(300);
    }
    UpdateData(false); //将变量的变化更新到控件里面
    MessageBox(_T("测试结束!"));
}

睡眠这里改成Sleep(2000)呢?

  消息分为队列消息(进入线程的消息队列)和非队列消息(不进入线程的消息队列)。对于队列消息,最常见的是 鼠标和 键盘触发的消息,例如WM_MOUSERMOVE,WM_CHAR等消息;还有例如:WM_PAINT、WM_TIMER和WM_QUIT。当鼠标、键盘事件被触发后,相应的鼠标或键盘 驱动程序就会把这些事件转换成相应的消息,然后输送到系统消息队列,由Windows系统负责把消息加入到相应线程的消息队列中,于是就有了消息循环(从消息队列中读取并派送消息)。还有一种是非队列消息,他绕过系统队列和消息队列,直接将消息发送到窗口过程。例如,当用户激活一个窗口系统发送WM_ACTIVATE,WM_SETFOCUS, andWM_SETCURSOR。创建窗口时发送WM_CREATE消息。在后面你将看到,MS这么 设计是很有道理的,以及他的整套实现机制。

应该是消息同步造成的,中间并没有机会执行串口程序,可通过增加消息处理解决。

干脆自己写线程,在自己的线程里面控制代码顺序执行。

问题已解决
我的output后面追加了

img


这几行代码