Boost ::线程何时终止?如何管理Boost ::线程



我有一个可以处理ZMQ消息的类。如果收到了一条消息,则该类通知其观察者。该观察者比创建一个boost ::线程可以解决收到的ZMQ消息。消息解决后,观察者启动了另一个线程,该线程比执行已解决的命令。

因此,有一个观察者为每个传入消息创建线程。如何确保创建的线程在解决消息后被安全销毁?另外,在解析器线程内启动的线程会发生什么。该线程最终还必须安全地破坏。

我认为这有一个简单的解决方案,但是我缺乏多线程的经验,也不是Google什么...

编辑:当他们自己返回值时,我什至不得不关心线程吗?

线程可以分离或连接。如果您加入,您的主线程将阻止直到完成为止。如果您分离,则线程将运行直到完成或应用程序终止。假设后者不会发生,这很好。

有关boost ::螺纹的专门(顺便说一句,您是否可以访问std :: thread-引入C 11)..

当boost ::代表执行线程的线程对象被破坏时,线程将分离。一旦线程分离,它将继续执行,直到施工中提供的功能或可召唤对象的调用,或者程序已终止。线程也可以通过在boost ::螺纹对象上明确调用distach()成员函数来分离。在这种情况下,boost ::线程对象停止表示现在已找到的线程,而是代表非螺纹。

必须使用boost ::线程对象的join()或timed_join()成员函数的执行线。join()将阻止调用线程,直到由boost ::线程对象表示已完成的线程为止。如果由boost ::线程对象表示的执行线程已经完成,或者boost ::螺纹对象表示非a-thread,则立即返回()。TimeD_Join()相似,除了如果在指定时间经过的时间不完整的情况下,对TimeD_Join()的呼叫也将返回。

旁边,除非此应用程序用于少量连接,否则请考虑一下您是否真的需要每个请求线程。有一些开销(有10s的微债券,默认情况下有时在1-2MB的内存之间)。

最新更新