我在线程里面访问串口
 if (!SetManSelectMeasure((LPTSTR)(LPCTSTR)dam, (LPTSTR)(LPCTSTR)tongdao))                         
{
 //   AfxMessageBox("1");
    CString s_data;
    CString *p_data;
    char m_data[1024];    if(!GetPersonMeasureData((LPTSTR)(LPCTSTR)dam,(LPTSTR)(LPCTSTR)m_data))  
    {
        s_data=m_data;
        p_data=new CString(s_data);
   //   AfxMessageBox(s_data);  
        ::PostMessage(pDlg->m_hWnd,WM_THREADFINISHED,0,(LPARAM)p_data);
     }
}    if()里的函数是调用的串口DLL里的,第一个if的意思是对 地址为dam的模块的第tongdao个通道 设置人工选测 下位机收到后解析  函数返回0代表成功   第2个if是得到刚才设置的那个通道的数据,通过m_data返回,那些命令都在函数里封装好。
    现在很奇怪,直接运行的话程序没有任何结果,非得要在弹出那个注释的AfxMessageBox(),才能显示结果。为什么非得每次有个消息框给挡一下才能正确反应呢。难道是因为线程没有做同步的原因,望高手不吝赐教

解决方案 »

  1.   

    GetPersonMeasureData是一个异步函数么?
    如果是异步函数的话,你这样执行,可能GetPersonMeasureData还没执行完,数据还没到m_data。
    我觉得应该增加一种机制来保证GetPersonMeasureData执行完后才能继续向下执行
      

  2.   

    估计SetManSelectMeasure 异步执行~
      

  3.   

    WM_THREADFINISHED消息是自定义消息还是windows内置消息?
      

  4.   

    收到 WM_THREADFINISHED 消息之后,主动刷新介面,看起来是没有刷新界面的原因。