在wxwidgets中将控制台数据从进程输出到gui

时间:2011-04-19 14:19:45

标签: multithreading user-interface wxwidgets

我在后台运行一个漫长的过程。我已设法将控制台数据输出到gui。但问题是,只有在过程完成后才返回数据。但我需要实时显示数据。也就是说,每次在控制台上产生一些输出时,我都需要显示数据。我正在用一个单独的线程在我的gui中运行这个过程。

我的意思是,它就像为ping命令构建一个gui,其中输出在每个数据包发送后显示在控制台上,即实时。我只需要实时将其重定向到gui。我正在wxwidgets中实现gui。任何帮助将不胜感激。

感谢你......

JVC

2 个答案:

答案 0 :(得分:2)

您希望显示的输出是否在与运行GUI的进程不同的进程中生成?或者在同一个过程中的一个单独的线程中?

我问,因为大多数人,当他们提出这个问题时,意味着一个单独的线程。既然你用“过程”标记了你的问题,我会认为这就是你的意思。

您需要进行一些进程间通信。有一种令人眼花缭乱的各种技术可以做到这一点。就个人而言,我总是使用套接字。

wxWidgets具有简单易用的套接字类wxSocketClient和wxSocketServer。

后台进程可能没有运行wxWidgets,所以你需要其他东西。我推荐使用boost :: asio。我知道它看起来很吓人,但实际上教程代码可以按原样使用。

还有很多事要说,但我冒险偏离这一点,因为你的问题中的细节很少。

答案 1 :(得分:1)

您可以拥有受wxMutex保护的输出队列。执行计算的线程写入队列,然后使用带有自定义事件的wxQueueEvent向GUI线程发出信号,让它知道线程不为空​​。然后GUI线程读取队列并输出数据。