在 C++ 中提升线程
Posted
技术标签:
【中文标题】在 C++ 中提升线程【英文标题】:boost threads in c++ 【发布时间】:2012-05-29 12:18:17 【问题描述】:所以我正在将代码修改为多线程,我已经阅读了几篇文章但没有找到我的答案,我有Main,A类,B类,现在我想知道是否可以在类中编程线程b 因此,当 main 调用 class a 时, this 又调用 class b 并在此处创建踏板,而不是从子类中的 main 中创建。谢谢。
主要
fr.place_sequences_to_nodes(&sequences,&leaf_nodes,reference_alignment,data_type);
int count = 1; root->name_internal_nodes(&count);
root->start_alignment(&mf);
ss.str(string());
ss << "Time main::align: "<< double(clock()-t_start)/CLOCKS_PER_SEC <<"\n";
Log_output::write_out(ss.str(),"time");
节点
void align_sequences(Model_factory *mf)
if(leaf) return;
left_child->align_sequences(mf);
right_child->align_sequences(mf);
this->align_sequences_this_node(mf);
【问题讨论】:
你应该发布一些你的代码,它会帮助我们给你一个更好的答案。 您可以编辑您的第一篇文章(其中包含问题)以包含代码(从您的源代码复制并粘贴),这样会更清晰。 所以你可以看到我有 main 但这不是动作发生的地方,是在节点中所以我如何从节点创建线程,这些线程将只运行一小段时间然后返回主要并继续,好的,我明白了 没关系。我编辑了你的帖子。一般来说,您可以使用任何启动线程来运行您喜欢的任何功能。您可以使用 Boost、Apache Decaf、Intel Thread Building blocks 来简化使用,但基本上它们都允许相同的操作集。 谢谢我在这里使用了 boost,它看起来更简单,我只需要一个教程中的工作示例。 【参考方案1】:您在这里混合了类和线程,可能会让自己感到困惑......如果您当前的应用程序是单线程的,那么您将拥有一个执行线程。您可以创建更多线程,它们创建的类的实例并不重要(除了实例的范围,可能让线程引用脱离范围,因此它们将无法控制)。没有例子,我不能多说。
【讨论】:
【参考方案2】:线程是独立的,无论是哪个其他线程创建它们。他们都是一样的。线程 A 可以创建线程 B,线程 B 创建线程 C,线程 C 创建线程 D,它们都是同一种线程。
您可以从任何地方创建它们,只需按照文档操作并记住注意事项(例如使用 scoped_ptr 到超出范围的 RAII 线程对象,导致对象崩溃)。
【讨论】:
@user1423656 从第 2 部分开始 blog.emptycrate.com/taxonomy/term/31,33,38 为您定义了一个不错的起点以上是关于在 C++ 中提升线程的主要内容,如果未能解决你的问题,请参考以下文章