ВУЗ:
Составители:
Рубрика:
- 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;
Страницы
- « первая
- ‹ предыдущая
- …
- 67
- 68
- 69
- 70
- 71
- …
- следующая ›
- последняя »
