答案 0 :(得分:1)
shared_ptr<base_class>
的std :: queue是将类从1个线程传递到另一个线程的最简单的解决方案,而不必担心内存管理问题。结合条件变量来表示队列不为空,因此消费者线程可以等待。
对于多态部分,有一个额外的虚函数(execute()?),因此消费者线程不应该知道它实际接收的是什么类。
答案 1 :(得分:1)
首先,我尝试使用std :: list。但是第一个问题是:我无法列出抽象类。
可以,然而,创建一个std::list
含指针到抽象基类,e.g。
std::list<base_class *> commands;
然后我试图使用boost :: ptr_list,但有第二个问题:类,在第一个线程创建的,dissappear与过程结束时,创建它们。所以指针变得非法。
你的意思是新命令是在第一个线程的堆栈上创建的吗?不这样做 - 第一个线程不知道什么时候第二个线程处理完命令,所以当他们结束了第一线应该没有定义。让第一个线程使用new
分配对象。
话虽这么说,你的用例听起来像是生产者 - 消费者问题的典型例子。请考虑一下the Wikipedia page在这个关于如何正确实施这样一个系统一些启发(它不是太难理解错误)。