【发布时间】:2018-05-16 07:32:00
【问题描述】:
我正在尝试读取来自不同进程的输出/日志并将它们显示在 GUI 中。这些过程将运行很长时间并产生巨大的输出。我计划流式传输这些流程的输出并根据我的需要显示它们。同时允许我的 gui 应用程序接受用户输入并执行其他操作。
我在这里所做的是,从主线程为每个进程启动两个线程。一个用于启动进程,另一个用于读取进程的输出。
这是我迄今为止提出的解决方案。
// Process Class
class MyProcess {
namespace bp = boost::process;
boost::asio::io_service mService; // member variable of the class
bp::ipstream mStream // member variable of the class
std::thread mProcessThread, mReaderThread // member variables of the class.
public void launch();
};
void
MyProcess::launch()
{
mReaderThread = std::thread([&](){
std::string line;
while(getline(mStream, line)) {
std::cout << line << std::endl;
}
});
mProcessThread = std::thread([&]() {
auto c = boost::child ("/path/of/executable", bp::std_out > mStream, mService);
mService.run();
mStream.pipe().close();
}
}
// Main Gui class
class MyGui
{
MyProcess process;
void launchProcess();
}
MyGui::launchProcess()
{
process.launch();
doSomethingElse();
}
到目前为止,该程序正在按预期运行。但我不确定这是否是正确的解决方案。请让我知道是否有任何替代/更好/正确的解决方案
谢谢, 苏里亚
【问题讨论】:
-
“按预期”工作的机会非常小,因为它完全充满了语法(和其他)错误。
-
我了解存在语法错误。我的问题是逻辑是否有效。我会尝试放一个 MWE。
-
好吧。你可以修复它。 I already had,但到那时我大部分时间都花在了我喜欢的所有时间上,然后转向next question。发布草率的代码只会伤害您的问题。
标签: boost stdthread asio boost-process