Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Запуск программы и ожидание завершения определенное время

Delphi , Программа и Интерфейс , Приложения чужие



Автор: Kostas
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Запуск программы и ожидание завершения опр.время

Запускает внешнюю программу и ожидает его завершения определённое время,
если истекает время то, программа продолжает работу не зависимо от
состояния внешней программы (На случай подвисания вн. прог-мы, особенно DOS)

Зависимости: Windows
Автор:       Kostas, kostas@tut.by, РБ Гомельская обл. г. Речица
Copyright:   вроде delphi.mastak.ru (слегка доработанно)
Дата:        03 мая 2002 г.
***************************************************** }

function ExecAndWait(aCmd: string; WaitTimeOut: cardinal = INFINITE): Cardinal;
var
  si: STARTUPINFO;
  pi: PROCESS_INFORMATION;
  res: BOOL;
  r: cardinal;
begin
  with si do
  begin
    cb := sizeof(si);
    lpReserved := nil;
    lpDesktop := nil;
    lpTitle := PChar('External program "' + aCmd + '"');
    dwFlags := 0;
    cbReserved2 := 0;
    lpReserved2 := nil;
  end;
  res := CreateProcess(nil, PChar(aCmd), nil, nil, FALSE, 0, nil, nil, si, pi);
  if res then
    WaitForSingleObject(pi.hProcess, WaitTimeOut);
  GetExitCodeProcess(pi.hProcess, r);
  result := r;
end;

// Пример использования:
procedure Exec(CommandStr, WaitTime);
begin
  if ExecAndWait(CommandStr, WaitTime) = WAIT_FAILED then
    ShowMessage('Истекло время ожидания внешней программы ' + CommandStr);
end;

Программный код на Delphi, который запускает внешнюю программу и ожидает ее завершения в указанное время. Если таймаут достигнут, программа продолжит выполнение, не учитывая состояние внешней программы.

Обзор кода:

  1. Функция ExecAndWait принимает два параметра: aCmd, который является командой для запуска (например, путь к исполняемому файлу), и WaitTimeOut, который является таймаутом в миллисекундах.
  2. Функция использует API-вызов CreateProcess для запуска внешней программы, передавая строку команды как аргумент.
  3. Если вызов CreateProcess успешен, функция ожидает завершения процесса с помощью API-вызова WaitForSingleObject, указывая таймаут.
  4. После ожидания функция получает код выхода процесса с помощью API-вызова GetExitCodeProcess и возвращает его как результат.

Процедура Exec является примером использования функции ExecAndWait, которая принимает два параметра: CommandStr, который является командой для запуска, и WaitTime, который является таймаутом в миллисекундах. Если функция ExecAndWait возвращает WAIT_FAILED, указывая, что таймаут был достигнут, процедура ShowMessage отображает сообщение о том, что внешняя программа заняла слишком много времени для выполнения.

Обратите внимание:

  • Константа INFINITE используется как значение по умолчанию для параметра WaitTimeOut, что означает, что программа будет ожидать бесконечно, если не указан таймаут.
  • Структуры STARTUPINFO и PROCESS_INFORMATION используются для хранения информации о процессе, который запускается, и его статусе выполнения.
  • API-вызов CreateProcess возвращает булевое значение, указывающее, успешно ли был создан процесс. Если вызов неудачен, функция не пытается ожидать процесса или получать его код выхода.

В целом, этот код предоставляет простой способ запустить внешнюю программу и ожидать ее завершения в указанное время. Он полезен в сценариях, где вам нужно выполнить третьестороннюю программу или скрипт, но не хотите ждать бесконечно, пока она не будет выполнена.

Функция ExecAndWait запускает внешнюю программу и ожидает ее завершения определенное время, если истекает время, то программа продолжает работу не зависимо от состояния внешней программы.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Приложения чужие ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 02:54:32/0.00337815284729/0