OnTimer(),OnPain()等消息响应都不及时 在我自写的SDI,VIEW中,由于抛消息拉起线程,当线程工作CPU占用率高时,OnTimer(),OnPain()等消息响应都不及时。不知是否是本线程的子线程在MFC机制下与其竞争消息响应的资源,以至于有时这此消息会响应不及时? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这是很正常,对于线程占CPU时间比较长的,你应该适应地中间采用一下Sleep。即使是创建了线程,如果是一个长任务,而且占CPU比较高,那还是会出现假死情况,所以最好中间Sleep一下。 都起线程了,主界面线程怎么可能假死?跟sleep有何关系? windows并不是一个实时的OS如果你想搞一个实时性比较强的任务,UNIX。其次WM_TIMER等是定时消息其意为系统在某段时间内定时向消息槽内压入消息,其响应取决于应用对消息的响应,如果想使用比较准确的时间请使用TimerEvent 可能你子程序处理量太大了,占CPU时间太长导致主界面假死的现象 简单的说要做出的效果像word,以页为单位,我用滑动条拖动,是要动态的计算出要到达的位置的,同时实时画出来。这个取根据滑动条到的POS相应要显示的页面当然不能是实时的啦,不然会卡死,假如计算量大的话。这时我就想过将要取的页面这操作做成异步的,用线程去取计算,弄好了回调到界面通知刷新,如还是在要显示的页面范围就显示,如果拖太快过了到下面的页面去了就显示白板,等相应的页面返回,这是在Onpain中做的。 现在的PDF阅读器,如Adobe,Foxit Reader等都是这样的原理。但它们除了可以像Word一样用滑动条控制外,还可以用Drag状态,直接在文档界面上拖动,页面相应的移动,但里面的数据是以页为单位实时计算出来的。我就是考虑拖太快时要如何不卡,速度也能跟得上,而且稳定性还要好。 我试过监听鼠标的LBUTTONDOWN,但我在计算好鼠标在屏上的位移后抛消息去取来要显示的页面时,这时CPU占用率较高,我如果鼠标拖动太快就后面几下都没有响应了,就出现了鼠标拖过去了,但界面没有时实的更新。这是在PreTranslateMessage中的响应都跟不上。我做了定时器去定时以一个位移处理,相当于稳定的移动页面,当移动到发消息去取相应的页面时,OnPain的响应都跟不上,同样出现了页面动着动着就卡了一下,然后又正常的速度移动,然后到要取页面时又卡,感觉抛消息去做的事情并未和VIEW这边异步。我怀疑是然VIEW, 当然,VIEW本身也是MFC在SDI下的消息要路由到也是要去抢资源的,不知是否在VIEW类里超的线程属于它的子线程,在一定程序上受限于VIEW,在CPU系统分配时间片资源给VIEW的时间片里去与VIEW共抢资源? COM 组件可选参数, 默认参数问题? 请教像鱼鱼天气秀这些桌面插件是用什么技术手段实现的? C++中关于引用的一点小问题问题 啊呀,要出人命了,大家快救救我!!! 图像模式问题 有谁知道w2000下读端口的函数 框架中有两个View,为什么在我调整窗口大小的时候,这两个View会闪烁不止? 如何调用DLL 为何自定义256色大鼠标,移动时会有闪烁感 为何OnMouseMove消息响应如此慢? 麻烦驱动高手进来留个QQ号,随后开贴重分相谢 类型转换问题
其次WM_TIMER等是定时消息其意为系统在某段时间内定时向消息槽内压入消息,其响应取决于应用对消息的响应,如果想使用比较准确的时间请使用TimerEvent
现在的PDF阅读器,如Adobe,Foxit Reader等都是这样的原理。但它们除了可以像Word一样用滑动条控制外,还可以用Drag状态,直接在文档界面上拖动,页面相应的移动,但里面的数据是以页为单位实时计算出来的。我就是考虑拖太快时要如何不卡,速度也能跟得上,而且稳定性还要好。
我试过监听鼠标的LBUTTONDOWN,但我在计算好鼠标在屏上的位移后抛消息去取来要显示的页面时,这时CPU占用率较高,我如果鼠标拖动太快就后面几下都没有响应了,就出现了鼠标拖过去了,但界面没有时实的更新。这是在PreTranslateMessage中的响应都跟不上。我做了定时器去定时以一个位移处理,相当于稳定的移动页面,当移动到发消息去取相应的页面时,OnPain的响应都跟不上,同样出现了页面动着动着就卡了一下,然后又正常的速度移动,然后到要取页面时又卡,感觉抛消息去做的事情并未和VIEW这边异步。我怀疑是然VIEW, 当然,VIEW本身也是MFC在SDI下的消息要路由到也是要去抢资源的,不知是否在VIEW类里超的线程属于它的子线程,在一定程序上受限于VIEW,在CPU系统分配时间片资源给VIEW的时间片里去与VIEW共抢资源?