wxWidgets程序增加CPU使用率

时间:2011-12-05 01:59:23

标签: c++ wxwidgets

我正在开发一个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进行了测试,有人可以建议吗?

2 个答案:

答案 0 :(得分:3)

完全正常,对于这个程序,cpu使用量增加。查看“RequestMore”的文档。这基本上循环了idle-function,因此它被重复调用。

解决方案:

使用wxTimer闪烁文本并删除空闲功能。

编辑:

当天的Tipp(:D):使用wxWidgets 2.9.x,它包含许多错误修正和改进:)。

答案 1 :(得分:0)

尝试替换

evt.RequestMore();

if( ! evt.MoreRequested() )
   evt.RequestMore();