我读到连接会阻塞调用它的线程,直到线程函数返回。因此,如果我的主线程创建一个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
答案 0 :(得分:1)
为线程提供一个函数,以正确的顺序在顺序模式下执行所需的操作。这是一个简化的例子:
void foo()
{
ptr->mymethod(parameter);
SomeOtherMethod();
}
boost::thread t(foo);
// do other stuff while thread runs
t.join()
答案 1 :(得分:1)
由于您使用的是Qt,因此非阻塞方式是:
作为参考,请查看Qt Project中的Mandelbrot Example,它使用排队连接在工作线程和主线程之间进行通信。