我正在编写一个wxWidgets程序,它非常类似于wxWiki使用空闲事件“制作一个呈现循环”的例子。我修改了显示面板以显示背景图像、闪烁的文本和动画。
void MyApp::onIdle(wxIdleEvent& evt)
{
if(render_loop_on)
{
drawPane->paintNow();
while(Pending())
Dispatch();
evt.RequestMore();
}
}
BasicDrawPane::BasicDrawPane(wxFrame* parent) :
wxPanel(parent)
{
wxBitmap background;
background.LoadFile("background.png", wxBITMAP_TYPE_PNG);
m_pBackground = new wxStaticBitmap(this, -1, background);
m_pBackground->Show();
m_pText = new wxStaticText(this, -1, wxT("blinking"), wxPoint(400, 10));
m_pText->Show();
m_bShow = false;
wxAnimation iconAni;
iconAni.LoadFile("animation.gif");
m_wxIconAnimationCtrl = new wxAnimationCtrl(this, -1, iconAni);
m_wxIconAnimationCtrl->Play();
}
void BasicDrawPane::paintNow()
{
m_bShow = !m_bShow;
m_pText->Show(m_bShow);
}
我增加了调度功能,因为没有它,程序启动后内存和CPU使用量将线性增加,但即使有了调度功能,运行几个小时后,CPU使用率也会逐渐上升。只有当我单独显示背景时,CPU的使用才会稳定。
我用wxWidgets 2.8.11在小狗linux上做了测试,有人能给我建议吗?
发布于 2011-12-05 11:52:36
这是完全正常的,这个程序的cpu使用量增加。查看"RequestMore“的文档。这基本上是循环空闲函数,因此它被反复调用。
解决方案:
使用wxTimer闪烁文本并删除空闲函数。
编辑:
Tipp (:D):使用wxWidgets 2.9.x,它包含了很多错误和改进:)。
发布于 2011-12-05 14:03:27
试着替换
evt.RequestMore();
使用
if( ! evt.MoreRequested() )
evt.RequestMore();
https://stackoverflow.com/questions/8380257
复制相似问题