gpt4 book ai didi

c++ - 何时分离或加入增强线程?

转载 作者:可可西里 更新时间:2023-11-01 18:20:58 25 4
gpt4 key购买 nike

我有一个大约每 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() 就足够了吗?

线程是否在 threadedMethod 完成时自行销毁?

最佳答案

这取决于您想要实现的目标。如果您不关心对 threadedMethod 的调用何时或是否终止,或者它们是否抛出异常,那么您可以在创建线程后立即分离它;当方法完成时,每个线程都将被销毁。并且您不应将线程存储在成员变量中。

如果您确实关心,那么您需要在您创建的每个线程上调用 join(因此每个线程一次,而不是在析构函数中一次)。我怀疑你不知道。

您真的需要为每个调用创建一个新线程吗?线程创建可能很昂贵,因此替代方法是使用线程池并将每个 threadedMethod 调用提交给它。然后池可以拥有 MyClass instance 的生命周期。但对于每 30 秒才发生一次的事情来说,这可能有点过分了。

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com