wxWidgets程序增加CPU使用率

wxWidgets program increase CPU usage

本文关键字:使用率 CPU 增加 程序 wxWidgets      更新时间:2023-10-16

我正在编写一个wxWidgets程序,它与使用空闲事件的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做了测试,有人能给我建议吗?

对于这个程序,cpu使用率增加是完全正常的。查看"RequestMore"的文档。这基本上是循环idle函数,以便反复调用它。

解决方案:

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

编辑:

每日提示(:D):使用wxWidgets 2.9。

尝试替换

evt.RequestMore();

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