大容量量数据插入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,然后间隔一段时间再更新的方法。
[解决办法]
呵呵,哪有在主线程里面做这个的?不卡才怪。
大量数据的io操作一般是放在子线程(单另创建一个)来完成的,主线程只是负责间隔地显示子线程当前的完成进度。