我有一个每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完成后,线程是否会自行销毁?
答案 0 :(得分:13)
这取决于你想要达到的目标。如果您不关心何时或是否对threadedMethod
的调用终止,或者他们是否抛出,那么您可以在创建它之后立即detach
该线程;方法完成时,每个线程都将被销毁。并且您不应该将线程存储在成员变量中。
如果你关心,那么你需要在你创建的每个线程上调用join
(因此每个线程一次,而不是在析构函数中一次)。我怀疑你没有。
你真的需要为每个电话创建一个新线程吗?线程创建可能很昂贵,因此另一种方法是使用线程池并将每个threadedMethod
调用提交给它。然后,池可以具有MyClass instance
的生命周期。但也许这对于每30年只发生一次的事情来说太过分了。