如果我爲它創建一個進程和兩個管道集,並且該進程需要某個用戶輸入某個時間,則來自Windows C API的GetExitCodeProcess()
始終返回1
。正如你可以利用Windows time
命令的例子,這將返回:當進程尚未完成時GetExitCodeProcess()返回1
The current time is: ...
Enter the new time:
然後立即退出,而無需等待輸入。
我不希望該過程完成,直到它真的完成了,所以我可以管輸入到它。我該如何解決這個問題。
我建立這個循環(我仍然希望能夠確定何時處理已完成):
for (;;)
{
/* Pipe input and output */
if (GetExitCodeProcess(...) != STILL_ACTIVE) break;
}
在此先感謝。
如果你想知道什麼時候該過程完成後,不使用GetExitCodeProcess - 考慮會發生什麼,如果進程退出代碼是STILL_ACTIVE!相反,使用WaitForSingleObject。一旦進程退出,進程句柄將發出信號。 – 2012-07-30 20:18:57
是的,但WaitForSingleObject會鎖定當前線程。此外,Microsoft建議不要使用STILL_ACTIVE作爲退出代碼(259)。 – Jori 2012-07-31 08:46:28
如果您期待窗口消息,請使用MsgWaitForMultipleObjects而不是WaitForSingleObject。但是,如果確實需要輪詢,則可以使用WaitForSingleObject超時爲零。這測試對象的狀態並立即返回。微軟可能會建議不要退出STILL_ACTIVE代碼,但如果有程序員採取任何預防措施的話,很少有人會這樣做。既然以正確的方式做到這一點很容易,爲什麼要冒這個風險呢? – 2012-07-31 19:46:29