我正在后台运行一个长进程。我已经成功地将控制台数据输出到gui。但问题是,只有在流程完成后才返回数据。但我需要实时显示数据。即,我需要显示数据,每次它在控制台上产生一些输出。我在我的gui中从一个单独的线程运行进程。
我的意思是,这就像为ping命令构建一个gui,在每个数据包发送后输出显示在控制台上,即实时。我只需要实时重定向到gui。我在wxwidgets中实现gui。任何帮助都将非常感激。
感谢你. .合资公司
您希望显示的输出是在与运行GUI的进程分开的进程中生成的吗?还是在同一进程中的单独线程中?
我问是因为大多数人,当他们问这个问题,意味着一个单独的线程。既然你在你的问题上加上了"过程"的标签,我就假定这就是你的意思。
您需要一些进程间通信。有各种各样令人眼花缭乱的技术可以做到这一点。就我个人而言,我总是使用套接字。
wxWidgets有简单,易于使用的socket类wxSocketClient和wxSocketServer。
后台进程可能没有运行wxWidgets,因此您将需要其他东西。我推荐使用boost::asio。我知道它看起来很吓人,但实际上教程代码可以按原样使用。
还有很多要说的,但我冒着跑题的风险,因为你的问题中没有多少细节。
可以使用wxMutex来保护输出队列。执行计算的线程写入队列,然后使用带有自定义事件的wxQueueEvent向GUI线程发出信号,让它知道线程不是空的。然后GUI线程读取队列并输出数据。