最近在做四个通道串口同时读数据显示。建立四个线程分别对四个串口进行读数据。编译环境是vc2008。当读串口线程函数结束时,想对static显示控件清屏。但每次按钮点结束后,线程已经结束,但static显示控件最后又刷新一次(也就是说线程里刷新的数据比我清屏的慢一步,导致最后清屏不成功),想问怎么解决呢?
用GetExitCodeThread(m_Thread1,&code)判断线程是否结束也不行呢。高手能帮忙指点下吗?多谢,急用呢
**注:线程函数是类的static成员函数:两个线程调用同一个数据处理函数
其中一个线程的相关代码:同一个按钮:点一次打开线程,点一次结束线程;
void CScaleDlg::OnBnClickedBtopen1()
{
if(!bOpen1)
{.....
//开启监测线程1?
if (m_Thread1 = AfxBeginThread(CommThread1, this))
bExit1=TRUE;//线程标志
}
else
{
bExit1=FALSE;//退出线程
//清屏
CString st;
st="";
SetDlgItemText(ID_STRecData1,st);
}
}
//接收数据线程函数
UINT CMultiScaleDlg::CommThread1(LPVOID pParam)
{
//线程函数
CMultiScaleDlg *pDlg = (CMultiScaleDlg*)pParam;
CString strScale;
strScale="";
pDlg->iCount=0;//数据计数
while(pDlg->bExit1)//
{ ......
//com通信
pDlg->ReadDataAndAnalyze(strScale);//数据分析显示
pDlg->iCount+=1;
if(pDlg->iCount>4)
{
pDlg->iCount=0;//归零
strScale="";
}
pDlg->m_RecData1=strScale;
//数据更新到主UI中-线程向对话框发送自定义消息
::PostMessage(pDlg->m_hWnd, WM_DISPLAY_CHANGE, 0, 0);
Sleep(100);
}
return 0;
}