私の 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))
)。これをどのように変更すればよいですか?または、これを行うより良い方法はありますか?