在我的 C++ 程序中,我需要启动一个运行时间很长的新进程并监视它的 I/O。我无法修改相关程序的源代码。
我正在考虑创建一个新线程并在其中启动进程并将输出连续(将异步输出)发送到主线程。
我用于创建流程的代码目前如下所示:
std::string SysExec::exec(char* cmd) {
FILE* pipe = popen(cmd, "r");
if (!pipe)
return "ERROR";
char buffer[128];
std::string result = "";
while (!feof(pipe)) {
if (fgets(buffer, 128, pipe) != NULL)
result += buffer;
}
pclose(pipe);
return result;
}
但是,如果从主线程调用,它将使主程序停止(因为while (!feof(pipe))
)。我应该如何修改这个?或者有没有更好的方法来做到这一点?