我有一个程序,它启动另一个控制台程序作为其子进程,并使用匿名管道与它通信。我重定向了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。
子进程不是由我编写的,我无法修改其代码。
如何在子进程完成写入时获得通知,如钩子?
感谢。
答案 0 :(得分:0)
您应该尝试使用ReadFileEx()异步读取管道。