【问题标题】:Outputting console data from a process to gui in wxwidgets将控制台数据从进程输出到 wxwidgets 中的 gui
【发布时间】:2011-04-19 14:19:45
【问题描述】:
我正在后台运行一个很长的进程。我已经设法将控制台数据输出到 gui。但问题是,只有在处理完成后才返回数据。但我需要实时显示数据。即,每次在控制台上产生一些输出时,我都需要显示数据。我正在我的 gui 中从一个单独的线程运行该进程。
我的意思是,这就像为 ping 命令构建一个 gui,在发送每个数据包后,输出会显示在控制台上,即实时显示。我只需要将它实时重定向到 gui。我正在 wxwidgets 中实现 gui。任何帮助将不胜感激。
谢谢你..
Jvc
【问题讨论】:
标签:
multithreading
user-interface
wxwidgets
【解决方案1】:
您希望显示的输出是否在与运行 GUI 的进程不同的进程中生成?还是在同一进程的单独线程中?
我之所以这么问,是因为大多数人在问这个问题时,都是指一个单独的话题。既然你用“过程”标记了你的问题,我会假设这就是你的意思。
您需要一些进程间通信。有多种令人眼花缭乱的技术可以做到这一点。就个人而言,我总是使用套接字。
wxWidgets 有简单易用的套接字类 wxSocketClient 和 wxSocketServer。
后台进程可能没有运行 wxWidgets,所以你需要其他的东西。我推荐 boost::asio。我知道它看起来很吓人,但实际上教程代码可以按原样使用。
还有很多要说的,但我冒着偏离重点的风险,因为您的问题中的细节太少了。
【解决方案2】:
您可以让输出队列受 wxMutex 保护。执行计算的线程写入队列,然后使用带有自定义事件的 wxQueueEvent 向 GUI 线程发出信号,让它知道线程不为空。然后 GUI 线程读取队列并输出数据。