我使用的代码如下:
begin
saSecurity.nLength := SizeOf(TSecurityAttributes);
saSecurity.bInheritHandle := True;
saSecurity.lpSecurityDescriptor := nil;
FillChar(suiStartup, SizeOf(TStartupInfo), #0);
suiStartup.cb := SizeOf(TStartupInfo);
suiStartup.dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
suiStartup.wShowWindow := SW_HIDE;
ccOk:=CreateProcess(nil, PChar(ExecutableFirst+' '+CommandsFirst),@saSecurity,@saSecurity, True, NORMAL_PRIORITY_CLASS, nil, nil, suiStartup, piProcess);
if ccOk then
begin
CreateProcess(nil, PChar(ExecutableSecond + ' ' + CommandsSecond), @saSecurity,@saSecurity, True, NORMAL_PRIORITY_CLASS, nil, nil, suiStartup, piProcess);
try
repeat Running:=MsgWaitForMultipleObjects(2,piProcess.hProcess,True,100,QS_ALLINPUT);
Application.ProcessMessages;
until Running <> WAIT_TIMEOUT
finally
CloseHandle(piProcess.hProcess);
CloseHandle(piProcess.hThread);
if (Running=WAIT_OBJECT_0) then BidsConversion; //run this when both process has finished
end;
end else
begin
raise.Exception(GetLastError.toString);
Exit
end;
end;
代码工作,但有时它正在触发,BidsConversion
但第一个进程仍未完成,因此引发了异常。
为什么应用程序不等待两个进程完成然后触发程序?