是这样的,程序大概平均每秒要向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(....);//插入数据
}
现在的问题,这样的思路写出来的效果是,插入过程中界面卡死,插入完后才恢复正常。请问有没有很好的解决方案可以避免?
UINT MonitorDataThread(LPVOID lpVoid)
{
DWORD dwDCCount = GetDataCacheCount();//某一刻得到数据个数
for(DWORD dwDCIndex = 0; dwDCIndex < dwDCCount; ++dwDCIndex)
{
//处理得到数据
.......
//逐条发送数据
SendMessage(....);
}
}
然后在主线程中,
void UpdateView(MonitorViewData* pData)
{
InsertItem(....);//插入数据
}
现在的问题,这样的思路写出来的效果是,插入过程中界面卡死,插入完后才恢复正常。请问有没有很好的解决方案可以避免?
解决方案 »
- ServiceTest.obj : error LNK2019: 无法解析的外部符号 __imp__StartServiceCtrlDispatcherA@4,
- 软件公司如何保证软件的安全,不被员工盗用,和传播?
- 请帮我改一下这段二叉树的代码,我运行不能成功啊~!
- 如何编程实现获得显卡信息,得到的信息越多越好.
- 急急:不好意思在这里要这个OFFice2000的英文版,请问哪里有下载OFFICE2000的英文版,给我一个链接
- 请问
- word文档的结构
- 请教个问题,关于MFC
- dwg文件的格式
- 我希望能读懂.RC文件,哪能找到相关资料? --
- 我的程序只能在装有VS2010的机器上运行?
- 内网的一台客户端连接到内网上的服务器映射到外网的IP和端口失败?
大量数据为什么不分页显示呢?没有可以直接看到上千条记录的屏幕吧:)
可不可以做成table页的list,每一个list只显示那么多条,超过了自动开一个table页继续显示。
List的数据插入/绘制,都比较耗费时间
多个table可以考虑
也可以考虑:数据和显示弱同步,数据更新可能是毫秒级别,List刷新则以秒级完成一般情况下,数据是数据,显示是显示,两者逻辑上分开
显示一般是交互态比较好
如果想展示程序在快速运行中的样子,那么可以整一个酷酷的Static在界面上...
你接收数据的时候,只与数据容器打交道,比如1秒1000,这是没有办法的,根据速率,选择合适的方法你的显示容器,只能放有限的数据(比如5000行的List,不会老年痴呆的),这个List定时到数据容器中取数据,刷新(比如每两秒取最新的100条展示)。为了展示数据快速吞吐的状态,可以做一个Static,它的更新成本极低,可以同步一条数据(PostMessage),眼花缭乱的效果瞧,你的项目中有三个关键点
1、数据容器:吞吐数据,后台线程
2、传输展示:同步一条数据,供观察
3、列表显示:定时刷新N条最新数据,供阅读
如果不用做实时显示,那可以插入前先调用一下SetRedraw(false)把列表刷新功能关掉,插完之后再调用SetRedraw(true)更新。或者可以根据策略,插入一定数量后刷新一下。系统默认每插入一条数据都刷新的