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 回答