C++ 让主线程等待boost线程完成任务(但未完成)

C++ 让主线程等待boost线程完成任务(但未完成),c++,multithreading,boost,C++,Multithreading,Boost,我发现有很多方法可以让一个线程等待另一个线程完成执行,然后再继续,但这不是我想要做的。我不太熟悉使用任何多线程API,但现在我正在尝试学习boost。我的情况是,我正在使用我的主线程(从int main()开始的线程)创建一个负责与主GUI交互的类的实例。然后调用一个类函数,创建一个boost线程,该线程反过来创建GUI并运行消息泵。我想做的事情是,当我的主线程调用classes成员函数来创建GUI时,我不希望该函数返回,直到我告诉它从新创建的线程返回。这样,我的主线程就不能继续从GUI类调用更

我发现有很多方法可以让一个线程等待另一个线程完成执行,然后再继续,但这不是我想要做的。我不太熟悉使用任何多线程API,但现在我正在尝试学习boost。我的情况是,我正在使用我的主线程(从int main()开始的线程)创建一个负责与主GUI交互的类的实例。然后调用一个类函数,创建一个boost线程,该线程反过来创建GUI并运行消息泵。我想做的事情是,当我的主线程调用classes成员函数来创建GUI时,我不希望该函数返回,直到我告诉它从新创建的线程返回。这样,我的主线程就不能继续从GUI类调用更多与GUI线程交互的函数,直到该线程完成GUI创建并进入消息循环。我想我可能能够弄清楚它是否是多个boost线程对象相互交互,但是当它是主线程(非boost对象)与boost线程对象交互时,我就迷路了。最后,我希望主线程中有一个循环来调用类函数(以及其他任务),以检查用户是否在GUI中输入了任何新的输入(购买消息循环检测到的任何更改,该消息循环将更新为结构并更改bool,以告知类函数中的主线程发生了更改)。如果您对此有任何建议,我们将不胜感激

这是主线程调用的成员函数

int ANNGUI::CreateGUI() { GUIMain = new Main(); GUIThread = new boost::thread(boost::bind(&Main::MainThreadFunc, GUIMain)); return 0; }; int ANNGUI::CreateGUI() { GUIMain=newmain(); GUIThread=newboost::thread(boost::bind(&Main::MainThreadFunc,GUIMain)); 返回0; }; 这是boost线程启动函数

void Main::MainThreadFunc() { ANNVariables = new GUIVariables; WndProc = new WindowProcedure; ANNWindowsClass = new WindowsClass(ANNVariables, WndProc); ANNWindow = new MainWindow(ANNVariables); GUIMessagePump = new MessagePump; ANNWindow->ShowWindows(); while(true) { GUIMessagePump->ProcessMessage(); } }; void Main::MainThreadFunc() { ANNVariables=新变量; WndProc=新窗口程序; ANNWindowsClass=新的WindowsClass(ANNVariables,WndProc); ANNWindow=新的主窗口(ANNVariables); GUIMessagePump=新的MessagePump; ANNWindow->ShowWindows(); while(true) { GUIMessagePump->ProcessMessage(); } };
顺便说一句,一切都很好,当我运行它时,它工作了,我只是在主线程中放了一个sleep(),这样我就可以稍微使用GUI了。

如果您想等待线程完成,只需使用join()()

如果您正在等待信号,一个简单的解决方案是使用互斥锁。boost的barrier mutex应该适合您:

您可以从增强线程或非增强线程增强互斥

您可以使用一个