【发布时间】:2014-08-06 15:24:53
【问题描述】:
我有一个带有 wxwidgets 的 GUI 程序。单击按钮时,应该启动并运行一个新线程,这样它就不会阻塞 UI。
从线程调用一个以回调函数作为参数的函数。
当我在没有线程的情况下运行程序(因此阻止 UI)时,没有问题。
但是当我在下面的代码中使用boost:thread 时,线程无法正常运行。
当程序尝试设置成员变量m_intValue 时,程序在回调函数CallBack() 中停止。这在没有单独线程的情况下是成功的,但是当我将它放在单独的线程中时会挂起。
有什么想法吗?我试图简化代码,使其更具可读性。如果它不会像这样编译,请原谅。我只是在问,也许有人马上就知道问题出在哪里!
代码
class MainFrame : public wxFrame
{
protected:
boost:thread m_workerThread;
m_intValue;
WorkerThread(Foo& afoo, Bar& aBar)
{
afoo.doSmth(aBar, boost::bind(&MainFrame::CallBack, this, _1, _2, _3)
}
void OnButtonClick()
{
Foo oFoo;
Bar oBar;
m_workerThread = boost::thread(&MainFrame::WorkerThread, this, boost::ref(oFoo), boost::ref(oBar));
}
void CallBack(int arg, int arg1, int arg2 )
{
m_intValue = arg;
}
};
【问题讨论】:
标签: callback wxwidgets boost-thread