3

別のコンソール プログラムを子プロセスとして起動し、匿名パイプを使用して通信するプログラムがあります。標準入力と標準出力の両方をリダイレクトしました。擬似コードは次のようになります。

// Create pipes for stdin and stdout
CreatePipe(&std_in_rd, &std_in_wr, NULL, 0);
CreatePipe(&std_out_rd, &std_out_wr, NULL, 0);

// redirection
startup_info.hStdOutput = std_out_wr;
startup_info.hStdInput = std_in_rd;

// create the process
CreateProcess(...);

// send command to the child process.
WriteFile(hWriteStdin, ...);

// receive feedback from the child process.
ReadFile(hReadStdout, ...);

しかし、子プロセスがコマンドを処理するには時間が必要であり、その出力を取得するまでにどれだけの時間を待つ必要があるかわかりません。パイプから読み出せるか調べるループを呼び出しPeekNamedPipeましたが、この方法はCPUを多く消費するので良くありません。

子プロセスは私が作成したものではなく、そのコードを変更できません。

フックのように、子プロセスが書き込みを終了したときに通知を受け取るにはどうすればよいですか?

ありがとう。

4

1 に答える 1

0

ReadFileEx() を使用して、パイプから非同期的に読み取ることを試みる必要があります。

于 2013-06-24T14:33:57.417 に答える