2012-03-02 63 views
7

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

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

是否线程破坏自己当threadedMethod完成?

回答

13

这取决于你想要达到的目标。如果您不在乎何时或如果电话threadedMethod终止,或者他们是否抛出,那么只要您创建线程,您就可以只是detach线程;方法完成后,每个线程都将被销毁。而且你不应该把线程存储在一个成员变量中。

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

你真的需要为每次调用创建一个新的线程?创建线程可能很昂贵,所以可以选择使用线程池并将每个调用都提交给该线程池。游泳池然后可以有MyClass instance的生命周期。但也许这对于每30秒才会发生一次的事情来说是过火。