【问题标题】:when to detach or join a boost thread?何时分离或加入增强线程?
【发布时间】:2012-03-20 14:38:06
【问题描述】:

我有一个方法,它大约每 30 秒触发一次。我需要在一个线程中。

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

这些是 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() 就够了吗?

线程方法结束后线程会自行销毁吗?

【问题讨论】:

    标签: c++ multithreading boost-thread


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-03
      • 2014-06-26
      • 2022-10-23
      • 1970-01-01
      • 2012-03-31
      • 1970-01-01
      • 2019-11-25
      • 1970-01-01
      相关资源
      最近更新 更多