Запуск программы и ожидание ее окончания, принудительное завершение если TimeoutDelphi , Программа и Интерфейс , Приложения чужиеЗапуск программы и ожидание ее окончания, принудительное завершение если Timeout
Автор: August { **** UBPFD *********** by delphibase.endimus.com **** >> Запуск программы и ожидание ее окончания, принудительное завершение если timeout Функция создавалась для запуска и сопровождения приложения в указаном интервале времени. Я лично для наблюдения за работой приложения включил функцию в нить, которая (обрывалась) по завершении процесса. Зависимости: Classes, SysUtils, Windows, strUtils, Consts; Автор: August, august@torba.com, ICQ:176381214 Copyright: doctorAugust Дата: 5 февраля 2003 г. ***************************************************** } function ExecuteFileTm(FileName: string; Params: string; Dsk: boolean; TimeOut: cardinal): boolean; var Res: LongBool; PIn: PROCESS_INFORMATION; SII: STARTUPINFO; RetCode: cardinal; TmOut: cardinal; //In seconds i: cardinal; CreationsFlags: cardinal; begin TmOut := TimeOut; try if Dsk then begin CreationsFlags := CREATE_DEFAULT_ERROR_MODE or NORMAL_PRIORITY_CLASS or CREATE_UNICODE_ENVIRONMENT; end else begin CreationsFlags := CREATE_DEFAULT_ERROR_MODE or CREATE_NO_WINDOW or NORMAL_PRIORITY_CLASS or CREATE_UNICODE_ENVIRONMENT; end; getstartupinfo(SII); Res := createprocess( pchar(FileName), pchar(Params), nil, nil, True, CreationsFlags, nil, pchar(extractfilepath(FileName)), SII, PIn); except CloseHandle(Pin.hProcess); ExecuteFileTm := False; exit; end; if not Res then begin CloseHandle(Pin.hProcess); ExecuteFileTm := False; exit; end; i := 0; RetCode := STILL_ACTIVE; while (i <= TmOut) and (RetCode = STILL_ACTIVE) do begin try GetExitCodeProcess(Pin.hProcess, RetCode); except CloseHandle(Pin.hProcess); ExecuteFileTm := False; exit; end; Sleep(1000); inc(i); end; if (i > TmOut) and (RetCode = STILL_ACTIVE) then begin TerminateProcess(Pin.hProcess, RetCode); CloseHandle(Pin.hProcess); // ExecuteFilePrExt:=false; ExecuteFileTm := false; // ION T exit; end; CloseHandle(Pin.hProcess); ExecuteFileTm := True; end; Функция Delphi Функция принимает четыре параметра:
Вот шаг за шагом, как функция работает:
Функция использует несколько исключений для обработки ошибок, которые могут возникнуть при выполнении, таких как неудачное создание или закрытие handle. В целом, эта функция предоставляет удобный способ запустить файл в отдельном потоке с контролем таймаута, что делает ее полезной для мониторинга и управления долгоживущими процессами. Функция ExecuteFileTm позволяет запустить программу, ожидать ее окончания в указанном интервале времени и принудительно закрыть если timeout. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Приложения чужие ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |