大家好,我在用VC做一个上位机数据解析软件,上位机使用LIBUSB 来接收下位机传输的数据,我在LIBUSB读线程里面解析数据,这些数据都有固定的格式 一帧一帧传上来的,解析之后我再把这些数据填充进LISTCTR里面,LISTCTRL 第一列是变量名,大概有30个变量左右,后面是该变量的内容,变量内容不时的刷新,填充数据项都是用m_listctrl.SetItemText() 这个函数进行填充,现在发现在我的笔记本上当帧率超过800时,整个程序变的很慢,有些帧已经显示的不对,在台式机上帧率超过1400,程序已经反映很慢,点击程序上的一些BUTTON 要很久才反应过来,此时在任务管理器里面看该程序的CPU占用率 基本上已经到了百分之30左右,我也试过ListCTRL的虚拟列表,改善不明显,感觉是刷新太快,LISTCTRL 填充耗费了大量的时间,不知道各位论坛的大神们有没有好点方法来处理这个问题,关键就是怎么让LISTCTRL 填充时间减短,或者还有没有其他更好的控件来处理此类问题?
m_listctrl.SetItemText()
想不卡都不行,因为你没有留时间片区响应其它消息了.
Threadfunction
{
Sleep(10); //一定要睡眠一下自己,分点时间片给主线程;}而且还有一个问题,m_listctrl插入那么多数据,实际上用户只看一部分数据的。也就是说你可以实际上把接收的数据存下来,等用户翻查的时候显示一个page,不用一下插入1400条吧,有点吓人。而且体验也不好吧。改成14 *100 或者 28 * 50 不是更好吗? 每次只显示一部分
//增加内容
XXXX
//更新内容
m_list.SetRedraw(TRUE);