我在线程里面访问串口
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(),才能显示结果。为什么非得每次有个消息框给挡一下才能正确反应呢。难道是因为线程没有做同步的原因,望高手不吝赐教
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(),才能显示结果。为什么非得每次有个消息框给挡一下才能正确反应呢。难道是因为线程没有做同步的原因,望高手不吝赐教
如果是异步函数的话,你这样执行,可能GetPersonMeasureData还没执行完,数据还没到m_data。
我觉得应该增加一种机制来保证GetPersonMeasureData执行完后才能继续向下执行