0

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

4

0 に答える 0