boost - thread.join()暂停ui

时间:2014-02-25 19:28:17

标签: c++ qt boost

我读到连接会阻塞调用它的线程,直到线程函数返回。因此,如果我的主线程创建一个boost线程,然后调用join,那么我的主线程将被阻止。 在我的情况下,ui是主线程,它需要等待线程完成才能执行下一个语句,当我使用thread.join()时,UI会冻结。我目前有这样的东西

boost::thread t(&Myclass::mymethod,ptr,parameter);
t.join();  //This blocks the ui
SomeOtherMethd();

现在我的问题是如何等待线程t结束然后调用SomeOtherMethod而不阻止UI。由于t.join()似乎冻结了ui

2 个答案:

答案 0 :(得分:1)

为线程提供一个函数,以正确的顺序在顺序模式下执行所需的操作。这是一个简化的例子:

void foo()
{
  ptr->mymethod(parameter);
  SomeOtherMethod();
}

boost::thread t(foo);

// do other stuff while thread runs

t.join()

答案 1 :(得分:1)

由于您使用的是Qt,因此非阻塞方式是:

  • 从您的工作线程发送信号
  • SomeOtherMethd()设为广告位

作为参考,请查看Qt Project中的Mandelbrot Example,它使用排队连接在工作线程和主线程之间进行通信。