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

Подождать завершения DOS-задачи

Delphi , ОС и Железо , DOS и Консоль

Подождать завершения DOS-задачи

Выдержка из лекций компьютерных курсов. Изучают DOS и Norton Commander. Дословно: Запуск команды NORTON. Если запуск команды NORTON не включен в команду автозапуска, либо в процессе работы осуществлялся выход программы NORTON, то запустить ее можно с помощью посредства nc.exe - это запускающий файл программы NORTON, находится он в каталоге NC, где собрана вся программа.

Каким образом организовать ожидание завершения DOS-задачи? Например, надо подождать, пока заархивируется файл, и далее обработать его.


uses Windows;

procedure RunRarAndWait;
var
  si: TStartupInfo;
  pi: TProcessInformation;
begin
  //подготовливаем записи si и pi к использованию
  FillChar(si, SizeOf(si));
  si.cb := SizeOf(si);
  FillChar(pi, SizeOf(pi));
  //попытаемся запустить рар
  if CreateProcess('rar.exe', 'parameters',
  nil, nil, //безопасность по умолчанию
  false,    //не наследовать хэндлов
  0,        //флаги создания по умолчанию
  nil,      //переменные среды по умолчанию
  nil,      //текущая директория по умолчанию
  si,       //стартовая информация
  pi)       //а в эту запись получим информацию о созданом процессе
  then
  begin
    //удалось запустить рар
    //подождем пока рар работает
    WaitForSingleObject(pi.hProcess, INFINITE);
    //убираем мусор
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);
  end
  else
    //выдаем сообщение об ощибке
    MessageDlg(SysErrorMessage(GetLastError), mtError, [mbOK], 0);
end;

Программный код, который вы предоставили, - это процедура Delphi, которая запускает архиватор RAR и ожидает его завершения. Вот подробное описание, как она работает:

  1. Процедура RunRarAndWait инициализирует две переменные: si (StartupInfo) и pi (ProcessInformation). Эти структуры используются для хранения информации о процессе, который создается.
  2. Процедура вызывает CreateProcess, чтобы запустить архиватор RAR с указанными параметрами. Если это успешно, она устанавливает обработчик процесса (pi.hProcess) с помощью WaitForSingleObject.
  3. Код затем ожидает бесконечно завершения процесса RAR с помощью WaitForSingleObject. Это функция блокирует до тех пор, пока указанный объект не будет сигнализирован (то есть процесс RAR будет окончен).
  4. Once the process has completed, the procedure closes the handles for the process and thread using CloseHandle.

Вот альтернативное решение, использующее более современный подход:

uses
  Windows,
  SyncObjs;

procedure RunRarAndWait;
var
  rarProcess: TProcess;
begin
  rarProcess := TProcess.Create(nil);
  try
    rarProcess.Executable := 'rar.exe';
    rarProcess.Parameters.Add('parameters');
    rarProcess.Run;
    while rarProcess.Running do
      Sleep(100); // wait for 0.1 seconds
  finally
    FreeAndNil(rarProcess);
  end;
end;

В этом примере мы используем компонент TProcess из стандартной библиотеки Delphi, чтобы запустить архиватор RAR. Мы устанавливаем путь к исполняемому файлу и параметры, как и раньше, но вместо ожидания процесса с помощью WaitForSingleObject, мы используем цикл, который проверяет, является ли процесс еще работающим с помощью свойства Running. Если это так, мы спим на 0.1 секунды (100 миллисекунд) перед следующей проверкой. Это подход может быть более эффективен, чем блокировка до бесконечности.

Обратите внимание: в обоих примерах вы должны заменить 'parameters' на реальные параметры командной строки, которые требуются архиватором RAR.

Как организовать ожидание завершения DOS-задачи в программе на языке Delphi с использованием функции WaitForSingleObject.


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

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




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


:: Главная :: DOS и Консоль ::


реклама


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

Время компиляции файла: 2024-11-30 11:42:55
2024-12-11 00:19:52/0.0087549686431885/1