wxProgressDialog以某种方式在死后保持app活着?

时间:2011-07-29 05:53:33

标签: c++ dialog wxwidgets exit

我对wxWidgets有一个奇怪的问题。我有以下代码

MyFrame::OnDoSomeLongThing(...) {
    progScreen = new wxProgressDialog(text,text,number,this,wxPD_AUTO_HIDE); // wxProgressDialog *progScreen is class member
    doPartOfThing() // calls the update method at the end of it
    ....
    doLastPartOfThing() // again calls update method that pushes value to 100/100
    progScreen->Destroy();
}

MyFrame::update() {
    progScreen->Update(newValue);
}

现在就是这样。我可以直接注释掉与progScreen相关的行,只需让流程不使用进度对话框,毕竟说完成后,当我关闭主窗口时,我的应用程序会优雅地退出。

但是,只需使用进度对话框就可以延长应用程序的使用寿命。我已经尝试过Destroy(),我已经尝试过简单地'删除progScreen',并且每次都尝试:我将关闭主框架,进程继续运行,并且在某些时候退出并带有一些天文数字。我能想到的唯一可能是相关的是,doPartsOfThings方法可以调用boost :: this_thread :: sleep,因为它涉及在我的模型类中等待等等。但是这个不应该与我的问题有关。或许它确实...编辑:我想强调从主(GUI)线程调用progScreen-> Update()。

所以我问,我正确使用wxProgressDialog吗?如果没有,应该如何使用?

感谢您的帮助!

编辑:

嗯......结果是删除wxPD_AUTO_HIDE修复了问题。我仍然不太确定问题是什么,但对话甚至仍然像以前一样。应用程序按预期关闭。

1 个答案:

答案 0 :(得分:0)

我认为您需要覆盖关闭应用程序的wxApp方法,以便在退出之前关闭wxProgressDialog对象。

  

wxApp :: OnExit

     

virtual int OnExit()

     

覆盖此成员函数以进行任何需要的处理   在应用程序即将退出时完成。之后调用OnExit   销毁所有应用程序窗口和控件,但在wxWidgets之前   清理。请注意,如果OnInit失败,则根本不会调用它。

     

此函数的返回值当前被忽略,返回   如果覆盖它,则与基类方法返回的值相同。

你需要这样的东西,假设progScreen是你框架的公共属性

int myApp::OnExit()
{
  (MyFrame*)(GetTopWindow())->progScreen->Destroy()
  return wxApp::OnExit();
}