我有一种方法,每30秒aprox触发一次。我需要一个线程。

我有一个可以从类外调用的方法。像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()是否足够?

当threadedMethod完成时,线程会自我毁灭吗?

最佳答案

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

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

您是否真的需要为每个调用创建一个新线程?线程创建可能会很昂贵,因此另一种选择是使用线程池并向其提交每个threadedMethod调用。然后,该池可以具有MyClass instance的生存期。但是,对于每30秒钟才发生一次的事情来说,这可能是个过大的杀伤力。

关于c++ - 何时分离或加入升压线程?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9527427/

10-14 12:41
查看更多