程序不响应windows消息/事件是怎么回事? 我要一个程序里加入了一个WM_TIMER消息,然后用SetTimer(123,40, NULL)设定了消息产生的频率,在OnTimer(nIDEvent)里让程序每产生一个消息就播放一幅图片,实现连续播放。但发现在播放图片期间,程序不响应其他消息了,如点击按钮也不起作用了。KillTimer(123)也有。各位高手不知道这个是设么原因? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我要一个程序里加入了一个WM_TIMER消息,然后用SetTimer(123,40, NULL)设定了消息产生的频率,在OnTimer(nIDEvent)里让程序每产生一个消息就播放一幅图片,实现连续播放。-----------------------------------------------------------------------------------这个思想是可行的(1000/40等于25,每秒钟只有25帧,机器应该可以处理的来),但估计是处理手法的问题,您可以这样做:OnTimer发生时把数据保存下来,然后用InvalidateRect触发窗口重画,在OnPaint中把当前保存着的图象画出来(StretchDIBits)。 我也试过用类似的方法播放视频文件,速度跟用direct draw差不多,效果很流畅,只吃百份之几的CPU资源。 1可能你的图片比较大或是绘制代码复杂, 导致处理时间太长,界面失去相应, 可以把绘制代码放到一线程里去做,就像1楼所说到.2也可以尝试优化绘制代码,放弃GDI的位图函数,因为很多场合,那些函数实在太慢了,换用DrawDibDraw等效率比较高的函数,或是直接用DirectX中。 WM_TIMER是个优先级很低的消息。根据lz的说法,可能是在WM_TIME中处理了画屏幕的功能。WM_PAINT的消息优先级要比WM_TIME高lz可以考虑用WM_PAINT消息画图,用WM_TIME消息确定画图时机和画那张图就可以了 谢谢这么多位热心的人士,可能是比较耗时吧,因为我除了要在电脑上播放图片之外还要把图片通过USB接口送到一个外设(LCD上)去显示。改了一下代码后,问题好像没那么严重了,不过好像还是存在较大的延时。 “在电脑上播放图片”这个用GDI可以在界面线程处理;“还要把图片通过USB接口送到一个外设(LCD上)去显示”这个没理由不开线程处理,如果是连续图片的话应该还要压缩编码后再传。 vs2010与 vc6.0 CString中GetLength的区别如何解决? 串口通信求解 对话框怎么没反应了啊 VC中怎么向ADO data 中的Command Text添加含有变量的语句啊?? 如何防止对话框控件切换时的闪烁? DirectInput的激活就失去响应问题. 请问如何到处pfx证书中的私钥和公钥? windows media player控件的问题 一个COM组件里有一个连接点,增加第二个连接点的时候要注意什么吗? 一定要唯一!!! 怎样根据数据不同变化坐标刻度 绘图方面的一个技术问题?
-----------------------------------------------------------------------------------
这个思想是可行的(1000/40等于25,每秒钟只有25帧,机器应该可以处理的来),但估计是处理手法的问题,您可以这样做:
OnTimer发生时把数据保存下来,然后用InvalidateRect触发窗口重画,在OnPaint中把当前保存着的图象画出来(StretchDIBits)。
可能你的图片比较大或是绘制代码复杂, 导致处理时间太长,界面失去相应, 可以把绘制代码放到一线程里去做,就像1楼所说到.2
也可以尝试优化绘制代码,放弃GDI的位图函数,因为很多场合,那些函数实在太慢了,换用DrawDibDraw等效率比较高的函数,或是直接用DirectX中。
“还要把图片通过USB接口送到一个外设(LCD上)去显示”这个没理由不开线程处理,如果是连续图片的话应该还要压缩编码后再传。