【发布时间】:2012-07-30 16:48:05
【问题描述】:
如果我为它创建一个进程和两个管道集,并且该进程在某个时间需要一些用户输入,则来自 Windows C API 的GetExitCodeProcess() 总是返回1。例如,您可以使用 Windows time 命令,这将返回:
The current time is: ...
Enter the new time:
然后不等待输入立即退出。
我不希望这个过程在它真正完成之前完成,这样我就可以通过管道输入它。我该如何解决这个问题。
我已经建立了这个循环(我仍然希望能够确定处理何时完成):
for (;;)
{
/* Pipe input and output */
if (GetExitCodeProcess(...) != STILL_ACTIVE) break;
}
提前致谢。
【问题讨论】:
-
如果您想知道进程何时完成,请不要使用 GetExitCodeProcess - 考虑如果进程退出代码为 STILL_ACTIVE 会发生什么!相反,请使用 WaitForSingleObject。一旦进程退出,进程句柄将发出信号。
-
是的,但是 WaitForSingleObject 会锁定您当前的线程。微软还建议不要使用 STILL_ACTIVE 作为退出代码 (259)。
-
如果您期待窗口消息,请使用 MsgWaitForMultipleObjects 而不是 WaitForSingleObject。但是,如果您确实需要轮询,则可以使用超时为零的 WaitForSingleObject。这会测试对象的状态并立即返回。 Microsoft 可能会建议不要使用 STILL_ACTIVE 的退出代码,但很少有程序员对此采取任何预防措施。既然以正确的方式做事同样容易,为什么要冒险呢?
-
你说得对,我会改的。感谢您的有用评论!