我正在开发一个wxWidgets程序,它与使用idle事件的wxWiki“Making a render loop”示例非常相似。我修改了显示面板以显示背景图像,闪烁的文本和动画。
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);
}
我添加了 Dispatch 功能,因为没有它,内存和CPU使用率会在程序启动后线性增加,但即使使用 Dispatch 功能,CPU使用率也会逐渐攀升跑了几个小时。仅当我单独显示背景时,CPU使用率才会稳定。
我在小狗linux上使用wxWidgets 2.8.11进行了测试,有人可以建议吗?
答案 0 :(得分:3)
完全正常,对于这个程序,cpu使用量增加。查看“RequestMore”的文档。这基本上循环了idle-function,因此它被重复调用。
解决方案:
使用wxTimer闪烁文本并删除空闲功能。
编辑:
当天的Tipp(:D):使用wxWidgets 2.9.x,它包含许多错误修正和改进:)。
答案 1 :(得分:0)
尝试替换
evt.RequestMore();
与
if( ! evt.MoreRequested() )
evt.RequestMore();