Разработка прикладных программ для ОС WINDOWS с помощью интегрированных сред Delphi / C++Builder. Баканов В.М. - 69 стр.

UptoLike

Составители: 

- 69 -
if out = true then { если старт удачен... out=true }
begin
if RuleParent = 0 then { если родитель должен ждать окончания
работы потомка }
begin
CloseHandle(pi.hThread); { хэндл потока не нужен - удаляем }
{ начинаем бесконечный цикл ожидания... }
if WaitForSingleObject(pi.hProcess, INFINITE) <> WAIT_FAILED then
begin
GetExitCodeProcess(pi.hProcess, dwExitCode); { если ошибка функции
ожидания... }
if RuleMessage then { если задан режим выдачи сообщений
об ошибках }
if dwExitCode <> WAIT_OBJECT_0 then { WAIT_OBJECT_0 = естественное
завершение процесса }
MessageDlg('Извините, процесс ' + CRLF + CRLF +
UpperCase(CommandLine) + CRLF + CRLF +
'закончен с ошибкой '+IntToStr(dwExitCode) + CRLF,
mtError, [mbOk], 0);
CloseHandle(pi.hProcess); { освобождаем хэндл процесса }
end; { конец IF WaitForSingleObject... }
end; { конеw IF RuleParent = 0 }
if RuleParent = 1 then { родитель не должен ждать окончания
работы процесса-потомка }
exit; { выход - ничего не делая }
if (RuleParent <> 0) and { родитель завершается }
(RuleParent <> 1) then
Application.Terminate; { закончить родительский процесс }
end; { конец IF out=true }
end; { конец процедуры RunExternal }
C++Builder.
Полностью функциональный C-аналог вышеприведенной
Pascal-процедуры RunExternal приведен ниже
void
__fastcall TForm1::RunExternal(char* CommandLine,
byte RuleParent,
byte Priority,
bool RuleMessage)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
DWORD dwCreationFlag,dwExitCode;
bool out;
                                       - 69 -


  if out = true then { если старт удачен... out=true }
  begin
    if RuleParent = 0 then { если родитель должен ждать окончания
                             работы потомка }
    begin
      CloseHandle(pi.hThread); { хэндл потока не нужен - удаляем }
      { начинаем бесконечный цикл ожидания... }
      if WaitForSingleObject(pi.hProcess, INFINITE) <> WAIT_FAILED then
      begin
      GetExitCodeProcess(pi.hProcess, dwExitCode); { если ошибка функции
                                                       ожидания... }
      if RuleMessage then { если задан режим выдачи сообщений
                           об ошибках }
      if dwExitCode <> WAIT_OBJECT_0 then { WAIT_OBJECT_0 = естественное
                                                завершение процесса }
      MessageDlg('Извините, процесс ' + CRLF + CRLF +
                    UpperCase(CommandLine) + CRLF + CRLF +
                    'закончен с ошибкой '+IntToStr(dwExitCode) + CRLF,
                    mtError, [mbOk], 0);
      CloseHandle(pi.hProcess); { освобождаем хэндл процесса }
      end; { конец IF WaitForSingleObject... }
  end; { конеw IF RuleParent = 0 }

   if RuleParent = 1 then { родитель не должен ждать окончания
                            работы процесса-потомка }
  exit; { выход - ничего не делая }

  if (RuleParent <> 0) and { родитель завершается }
      (RuleParent <> 1) then
      Application.Terminate; { закончить родительский процесс }

 end; { конец IF out=true }

end; { конец процедуры RunExternal }

   C++Builder. Полностью функциональный C-аналог вышеприведенной
Pascal-процедуры RunExternal приведен ниже

void
__fastcall TForm1::RunExternal(char* CommandLine,
                               byte RuleParent,
                               byte Priority,
                               bool RuleMessage)
{
  STARTUPINFO si;
  PROCESS_INFORMATION pi;
  DWORD dwCreationFlag,dwExitCode;
  bool out;