多线程环境下CLISTCTRL切换和刷新慢的问题如何解决
环境:WIN2000 SP4
VS2003。NET
本地运行了自己开发的一个网络服务器软件(没有问题的)
然后运行客户端,
客户端的主界面重载了ONEARSE( ),用来设置背景图片,本身是个对话框程序
原来使用的是LISTBOX监控窗口,刷新和程序切换,界面都没有问题,
改用CLISTCGTRL控件的REPORT模式做监控窗口后,出现问题
CLISTCTRL控件的刷新,在一直保持在TOP WINDOW位置的时候,正常
但是如果有其他程序占用TOP WINDOW位置,然后切换,如果已经连接到服务器(客户端本身也是多线程),那么经常在切换的时候出现CLISTCTRL控件要等一些时间才出现,其他部分却完全正常,
或者把鼠标移动到CLISTCTRL上,也能一点但刷新出来,
但是如果立即最小化,又最大化,通常能立即恢复
在WIN98下调试发现也有这问题,但是以前使用LISTBOX没有任何问题
界面上的CLISTCTRL采用定时刷新机制,间隔3-5秒
同时各线程在收到消息后也会发送立即刷新消息,然后主截面就立即刷新CLISTCTRL控件内容
为了防止闪动,在刷新函数中使用了SETREDRAW( )函数
请各位帮忙分析原因,
界面这东西我很弱的
问题点数:60、回复次数:7Top
1 楼danscort2000(danscort.yu)回复于 2005-11-25 16:52:34 得分 0
没有人有过类似的问题吗?
单线程下完全正常,开启多线程就刷新有问题了
可是多线程都是工作线程,没理由啊,难道是消息发的太频繁了导致的?繁忙的时候
每0。5秒刷新一次算不算频繁Top
2 楼lixiaosan(小三)回复于 2005-11-25 17:06:21 得分 15
Invalidate() ???Top
3 楼danscort2000(danscort.yu)回复于 2005-11-25 22:44:38 得分 0
没有使用INVALIDATE( )
INVALIDATE( )导致整个界面被刷新,
我只是对特定控件的内容进行刷新,出了刷新缓慢的问题
问题出现在失去焦点后重新获得焦点时Top
4 楼jiangsheng(蒋晟.Net[MVP])回复于 2005-11-26 06:12:08 得分 20
估计是SetRedraw的问题
用虚列表+CListCtrl::Update,更新的项目不可见的话没必要SetRedraw这么兴师动众Top
5 楼danscort2000(danscort.yu)回复于 2005-11-27 13:40:13 得分 0
顶顶Top
6 楼xuxiongjun(不做帅哥已有很多年)回复于 2005-12-07 15:36:55 得分 15
学习Top
7 楼Mackz(在相互)回复于 2005-12-08 09:42:02 得分 10
多线程同步要做好。Top




