我有一种方法,每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/