16个线程(使用同一个类,以不同Com口区分 ),同时采集数据,基本同时显示测试结果(根据Com值,显示在不同的label上)
但是老是显示不全数据。开始测试
 void CDataShowView::OnBnClickedBtnStart()
{
  for (int i = 5; i <=20; i++)
  {

StartThread(i,0);
    }   
}显示数据
void CCollectThread::ShowStatusView(int iType,CString csInfo)
{
EnterCriticalSection(&CCollectThread::m_csCollectLock);
pStatusView->ShowStatus(iType,csSOFTWARE_NAME,csInfo );
LeaveCriticalSection(&CCollectThread::m_csCollectLock);
}

解决方案 »

  1.   

    你的意思是16个线程分别等待16个com口数据,另外一个线程或者主线程的窗口类负责更新每个label
    问题出在你的设计上,如果数据来的比较快,几乎同时到的话,你的更新线程又有其他繁忙任务时,
    你说的现象理论上就会发生;
    原因是大家数据都来了,1号更新不给机会5号、8号等,
    等机会来了可能又是其他数据或者没有数据了,出现很多数据缺少显示,但实际采集到情况。把com接收线程里面直接更新数据显示改成PostMessage()
    用消息通知界面本com口新数据来了,请更新,应该能够避免你说的情况;