首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

大容量量数据插入CMFCListCtrl怎么使界面不假死

2012-09-19 
大容量量数据插入CMFCListCtrl如何使界面不假死?是这样的,程序大概平均每秒要向list插入1000多条数据,是逐

大容量量数据插入CMFCListCtrl如何使界面不假死?
是这样的,程序大概平均每秒要向list插入1000多条数据,是逐条插入,类似收到1条就向list插一条。原先逻辑是,开了一个工作线程是做接收、处理数据然后将得到的数据一条条sendmessage至listview窗口上,然后在主线程中进行InsertItem的操作,类似:
UINT MonitorDataThread(LPVOID lpVoid)
{
  
  DWORD dwDCCount = GetDataCacheCount();//某一刻得到数据个数
  for(DWORD dwDCIndex = 0; dwDCIndex < dwDCCount; ++dwDCIndex)
  {
  //处理得到数据
  .......
  //逐条发送数据
  SendMessage(....);
  }
}
然后在主线程中,
void UpdateView(MonitorViewData* pData)

  InsertItem(....);//插入数据
}
现在的问题,这样的思路写出来的效果是,插入过程中界面卡死,插入完后才恢复正常。请问有没有很好的解决方案可以避免?有人说,可以考虑:数据和显示弱同步,数据更新可能是毫秒级别,List刷新则以秒级完成,但不知如何实现,谢谢指教

[解决办法]
这种思路很好,但是为了解决闪屏的现象,还是需要采用先锁定list,然后间隔一段时间再更新的方法。

探讨

你把SendMessage改成PostMessage试试。SendMessage会阻塞线程

[解决办法]
呵呵,哪有在主线程里面做这个的?不卡才怪。
大量数据的io操作一般是放在子线程(单另创建一个)来完成的,主线程只是负责间隔地显示子线程当前的完成进度。

热点排行