何时分离或加入提升线程?

Pie*_*ier 8 c++ multithreading boost-thread

我有一个方法,每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
}
Run Code Online (Sandbox Code Playgroud)

那么每次调用方法时我都必须分离mThread吗?

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

threadMethod完成后,线程是否会自行销毁?

Ala*_*kes 14

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

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

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