【发布时间】:2014-12-01 20:14:36
【问题描述】:
我有一个wxwindows应用,在一个按钮的onclick事件中,我有一个很长的过程,比如我有这样的东西:
for(int i=1;i<100;i++)
{
sleep(1000);
gaugeProgress->SetValue(i);
*textOutput<<i;
}
运行此代码,停止 UI 响应。我加了
Refresh();
Update();
紧接着
*textOutput<<i;
但它不起作用。
有什么方法可以让我抽出事件?
我正在使用 VS 20102 在 Windows 上工作
【问题讨论】:
-
创建一个新线程并在该线程中进行艰苦的工作。如果您需要指示进度或完成,您可以从该线程向主 UI 线程发送通知。同样,如果您想取消任务,您可以从主线程向新线程发送消息。周围有很多 tuts,我想有人涵盖了 wxWidgets 以及在使用该框架时如何执行此任务。 :)
-
@enhzflep 谢谢。线程之间如何通信? Boost有什么帮助吗?我记得在 MFC 中,有一个方法可以处理事件并阻止 wndows 挂起。 WxWidgets中有没有这样的方法?
-
没问题。在普通的 win32 世界中,人们会使用
SendMessage或PostThreadMessage。我不使用 BOOST 并且在我的任何琐碎 wx 项目中都不需要线程。我想搜索“与 PostThreadMessage 等效的 wxWidgets”可能会得到有用的结果。这是结果之一,也许它有帮助:forums.wxwidgets.org/viewtopic.php?t=8392 -
@enhzflep:我发现 wxYield() 很有帮助。
标签: c++ visual-c++ wxwidgets