何时分离或加入提升线程?

时间:2012-03-02 03:06:23

标签: c++ multithreading boost-thread

我有一个每30秒触发一次的方法。我需要在一个帖子中。

我有一个方法,我可以从课外调用。像callThreadedMethod()这样的东西,它创建了一个自己调用最终的threadedMethod的线程。

这些是MyClass的方法

void callThreadedMethod(){
    mThread = boost::shared_ptr<boost::thread>(new boost::thread(&MyClass::threadedMethod, this));
}

void threadedMethod(){
    //more code NOT inside a while loop
}

每次调用方法时我都必须分离mThread吗?

在MyClass析构函数中调用join()是否足够?

threadMethod完成后,线程是否会自行销毁?

1 个答案:

答案 0 :(得分:13)

这取决于你想要达到的目标。如果您不关心何时或是否对threadedMethod的调用终止,或者他们是否抛出,那么您可以在创建它之后立即detach该线程;方法完成时,每个线程都将被销毁。并且您不应该将线程存储在成员变量中。

如果你关心,那么你需要在你创建的每个线程上调用join(因此每个线程一次,而不是在析构函数中一次)。我怀疑你没有。

你真的需要为每个电话创建一个新线程吗?线程创建可能很昂贵,因此另一种方法是使用线程池并将每个threadedMethod调用提交给它。然后,池可以具有MyClass instance的生命周期。但也许这对于每30年只发生一次的事情来说太过分了。