Tak więc stworzyłem formularz w Delphi, który pozwala mi uruchamiać różne skrypty sikuli o różnych konfiguracjach. Obecnie pracuję nad tym, aby umożliwić osobom używającym formularza skonfigurowanie różnych skryptów sikuli, które będą uruchamiane po drugim. Tak jak w:Jak mogę poczekać na zakończenie zewnętrznego procesu?
Krok 1: SikuliScript1 z ConfigFile1. Krok 2: SikuliScript2 z ConfigFile2. etc ... To jest mój kod do tej pory:
procedure TSikRunForm.btnRunClick(Sender: TObject);
begin
DirCombo:= '/C '+DirSik+'\sikuli-script.cmd' +' -r ' + DirScript + ' --args '+DirConfig;
if SikFound then begin
ShellExecute(Handle, nil, 'cmd.exe', pChar(DirCombo), nil, SW_SHOWNORMAL);
Application.minimize;
end else begin
ShowMessage('Select the correct folder for your Sikuli installation folder');
end;
end;
I działa to doskonały, sikuli skrypt działa doskonale, a podczas jazdy, linia cmd jest widoczny z różnych działań przedstawionych które są wykonywane. Po wykonaniu skryptu sikuli linia cmd zamyka się sama. Tak więc moduł obsługi powłoki wie, kiedy wyłączyć uruchomiony proces. Moje pytanie brzmi: czy można powiedzieć delphi: Po tym, jak przewodnik zakończył proces, uruchom następny proces (skrypt Sikuli)? Teraz wiem, że mogę iść z całym createProcess w delphi, ale to po prostu wydaje się przesadą. Musi być sposób, aby to zrobić szybciej i łatwiej. Ktoś ma jakąś wskazówkę?
Jeśli chcesz pompować kolejkę, lepiej użyć 'MsgWaitForMultipleObjects'. Ponadto, jesteś przeciekającymi uchwytami. Dwa za każde połączenie z tą funkcją. –
Dlaczego upadły? – OnTheFly
@DavidHeffernan Dlaczego upadek? Masz rację co do uchwytów (moje złe), ale daje rozwiązanie tego problemu, uruchamiając jeden proces po drugim. –