2017-06-15 44 views

回答

4

可以使用WaitForSingleObject功能上創建的過程處理,像這樣:

STARTUPINFO si {sizeof(si)}; 
PROCESS_INFORMATION pi {}; 

CreateProcessW(/*your arguments here*/); 

WaitForSingleObject(pi.hProcess, INFINITE); 

請注意,如果你使用INFINITE的等待時間,功能塊,直到進程終止。如果您希望父進程在同時進行其他操作,最好是將該代碼放在單獨的線程中。

如果您希望父進程是創建進程的完整包裝器,請在完成獲取子進程的退出代碼時使用GetExitCodeProcess

DWORD dwExit; 
GetExitCodeProcess(pi.hProcess, &dwExit); 

此代碼只是一個簡單的例子。我在答案中提到的所有三個函數都可能失敗,而健壯的代碼將檢查它們的返回值,並在出現故障時採取相應措施。

+1

對downvote感到好奇。 OP的問題可能表明缺乏研究,但我的答案是正確的。 –

+1

*「如果您希望父進程在同時進行其他操作,最好是將該代碼放在單獨的線程中。」* - 這是一種做法,但不一定是最好的。 'MsgWaitForMultipleObjects'可能更合適。首先,它不需要你與另一個線程同步。 – IInspectable

+1

['PROCESS_INFORMATION'](https://msdn.microsoft.com/en-us/library/windows/desktop/ms684873(v = vs.85).aspx)中沒有'dwExit'字段。 – zett42