【发布时间】:2011-12-05 01:59:22
【问题描述】:
我正在开发一个 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);
}
我添加了Dispatch功能,因为没有它,程序启动后内存和CPU使用率会线性增加,但即使使用Dispatch功能,CPU使用率也会逐渐攀升运行几个小时。只有当我单独显示背景时,CPU使用率才会稳定。
我在puppy linux上用wxWidgets 2.8.11做了测试,谁能给点建议?
【问题讨论】:
-
好像动画会在MyApp::onIdle句柄之外产生更多的wxIdleEvent,这样就会有越来越多的空闲事件被推入队列,但是不知道怎么解决。