【发布时间】:2018-02-18 01:01:30
【问题描述】:
Chain1、Chain2、Chain3,所有的类结构都是一样的,只是真正的区别在于里面的线程Dofunction,所以除了那个DoFunction之外,它们本质上是同一个类。这不是在做类似于How do I use while true in threads? 的解决方案吗? 以下是我要完成的工作的总体思路。当我尝试加入时,第二个线程挂断了。
main()
{
Chain1 generator;
Chain2 preprocessor;
Chain3 processor;
// to communicate to the parent for data transfer
processsor.makeChild(&generator);
processor.makeChild(&preprocessor);
// initialize the threads
generator.init();
preprocessor.init();
processor.init();
// join the threads
generator.start();
preprocessor.start(); // issue here hangs up here trying to join
processor.start();
}
class Chain1 //or Chain2 or Chain3...
{
init()
{
// stored as a class member
chain_thread = std::thread(&Chain1::Dofunction, this); // or std::thread(&Chain::Chain2::Dofunction, this); // or std::thread(&Chain::Chain3::Dofunction, this);
}
start()
{
chain_thread.join();
}
Dofunction()
{
while(true)
{
//... different for each Chain1, Chain2, Chain3
}
}
}
【问题讨论】:
-
“不同”如何?我真的不明白这个问题。只需编写代码 - 有什么问题?
-
我不确定我是否理解这个问题。根据所涉及变量的名称,我猜您尝试创建一个包含三个步骤的管道 - 生成、预处理和处理 - 其中生成器不断创建应该通过管道传递的新值,对吗?
-
问题是什么?问题是什么?这些线程是否以某种方式进行通信?
-
// 加入线程 generator.start();预处理器.start(); // 这里的问题在这里挂断,试图加入 processor.start();
-
我尝试加入的第二个线程挂断了。我不是在做与链接中的解决方案类似的事情吗?
标签: c++ multithreading join