Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 在wxwidgets中将控制台数据从进程输出到gui_Multithreading_User Interface_Wxwidgets - Fatal编程技术网

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

Multithreading 在wxwidgets中将控制台数据从进程输出到gui,multithreading,user-interface,wxwidgets,Multithreading,User Interface,Wxwidgets,我正在后台运行一个很长的进程。我已经成功地将控制台数据输出到gui。但问题是,只有在流程完成后才会返回数据。但我需要实时显示数据。也就是说,每次它在控制台上产生一些输出时,我都需要显示数据。我在gui中从一个单独的线程运行该进程 我的意思是,这就像为ping命令构建一个gui,在每个数据包发送后,控制台上显示输出,即实时输出。我只需要将它实时重定向到gui。我正在wxwidgets中实现gui。任何帮助都将不胜感激 谢谢你 Jvc您希望显示的输出是在独立于运行GUI的进程中生成的吗?还是在同一进

我正在后台运行一个很长的进程。我已经成功地将控制台数据输出到gui。但问题是,只有在流程完成后才会返回数据。但我需要实时显示数据。也就是说,每次它在控制台上产生一些输出时,我都需要显示数据。我在gui中从一个单独的线程运行该进程

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

谢谢你


Jvc

您希望显示的输出是在独立于运行GUI的进程中生成的吗?还是在同一进程中的单独线程中

我这样问是因为大多数人,当他们问这个问题时,是指一个单独的线程。既然你已经用“过程”标记了你的问题,我想这就是你的意思

您需要一些进程间通信。要做到这一点,有各种各样令人困惑的技术。就我个人而言,我总是使用插座

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

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


还有很多话要说,但我有可能偏离重点,因为您的问题中的细节太少。

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

我从中找到了一个简单的答案,它确实有效。。。