改变线程的标准输入和输出

时间:2014-06-03 15:28:49

标签: c++ multithreading qt tcl qtgui

我有一个创建两个线程的应用程序。 (用于Qt GUI的thread_1和用于运行TCL解释器的应用程序的thread_2)。

我想要thread_1(Qt GUI)创建命令并将其发送到thread_2(TCL解释器)。

我正在考虑将thread_1的stdout连接到thread_2的stdin,我不知道该怎么做? 如果你知道如何做或者可以建议不同的工作方式,我将非常感谢你的帮助。

2 个答案:

答案 0 :(得分:1)

我建议的解决方案需要设置2 std::queue<>std::list让每个线程将消息传递给另一个,反之亦然。最简单的方法是让每个线程都设置自己的传入消息队列,让其他线程获得指向它的指针。首先,您需要队列数据类型的同步版本:正如我在评论中提到的那样,实现there

然后你只需要升级你的线程类(或者可运行的类,或者你用作任务的抽象的任何东西),内部有一个这样的队列,并且send方法是公共可访问的,所以其他任务可能会向其发布消息。然后,您的任务必须定期检查该队列是否有传入消息,并最终处理它。

注意:我从堆栈溢出本身获得了该页面,因为博客所有者是该社区的成员。请参阅that page谈论队列同步问题。

答案 1 :(得分:0)

我不确定您为什么要在此处通过标准输入和输出,但我认为问题可能比您想象的要简单得多。我个人会使用qt signal-slot mechanism,如下所示:

connect(guiThreadSender, SIGNAL(sendCommand(const QByteArray&)),
        tclThreadReceiver, SLOT(handleCommand(const QByteArray&)));