PeekNamePipe()的替代品,带有匿名管道 - WIN32

时间:2013-06-24 14:20:23

标签: c++ winapi ipc pipe

我有一个程序,它启动另一个控制台程序作为其子进程,并使用匿名管道与它通信。我重定向了stdin和stdout。伪代码就像:

// 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。

子进程不是由我编写的,我无法修改其代码。

如何在子进程完成写入时获得通知,如钩子?

感谢。

1 个答案:

答案 0 :(得分:0)

您应该尝试使用ReadFileEx()异步读取管道。