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

UptoLike

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

- 70 -
memset(&si, 0, sizeof(STARTUPINFO)); // обнулить структуру si
si.cb=sizeof(STARTUPINFO); // заполним поле cb структуры si
switch (Priority) // настройка приоритета процесса-потомка
{
case 0: dwCreationFlag=REALTIME_PRIORITY_CLASS;
break;
case 1: dwCreationFlag=HIGH_PRIORITY_CLASS;
break;
case 2: dwCreationFlag=NORMAL_PRIORITY_CLASS;
break;
default:
dwCreationFlag=IDLE_PRIORITY_CLASS;
}
out=CreateProcess(NULL,CommandLine,NULL,NULL,false,
dwCreationFlag,NULL,NULL,&si,&pi);
if (!out) // если старт неудачен... out=false
{
if (RuleMessage) // если задан режим выдачи сообщений об ошибках
MessageDlg("Извините, выполнение\n\r\n\r" +
UpperCase(CommandLine) +
"\n\r\n\rневозможно... (ошибка " +
IntToStr(GetLastError()) + ")",
mtError, TMsgDlgButtons() << mbYes, 0);
return;
} // конец IF out = false
if (out) // если старт удачен... out=true
{
if (RuleParent == 0) // если родитель должен ждать
// окончания работы потомка
{
CloseHandle(pi.hThread); // хэндл потока
уже не нужен - удаляем
// начинаем бесконечный цикл ожидания...
if (WaitForSingleObject(pi.hProcess, INFINITE) != WAIT_FAILED)
{
GetExitCodeProcess(pi.hProcess, &dwExitCode); // если
// ошибка функции ожидания...
if (RuleMessage) // если задан режим выдачи сообщений об ошибках
if (dwExitCode != WAIT_OBJECT_0) // WAIT_OBJECT_0 = естественное
// завершение процесса
MessageDlg("Извините, процесс\n\r\n\r" +
UpperCase(CommandLine) +
"\n\r\n\rзакончен с ошибкой " +
IntToStr(dwExitCode) + "\n\r",
mtError, TMsgDlgButtons() << mbOK, 0);
                                     - 70 -




memset(&si, 0, sizeof(STARTUPINFO)); // обнулить структуру si
si.cb=sizeof(STARTUPINFO); // заполним поле cb структуры si

switch (Priority) // настройка приоритета процесса-потомка
{
  case 0: dwCreationFlag=REALTIME_PRIORITY_CLASS;
           break;
  case 1: dwCreationFlag=HIGH_PRIORITY_CLASS;
           break;
  case 2: dwCreationFlag=NORMAL_PRIORITY_CLASS;
           break;
  default:
           dwCreationFlag=IDLE_PRIORITY_CLASS;
}

out=CreateProcess(NULL,CommandLine,NULL,NULL,false,
                  dwCreationFlag,NULL,NULL,&si,&pi);

if (!out) // если старт неудачен... out=false
{
  if (RuleMessage) // если задан режим выдачи сообщений об ошибках
    MessageDlg("Извините, выполнение\n\r\n\r" +
                   UpperCase(CommandLine) +
                   "\n\r\n\rневозможно... (ошибка " +
                   IntToStr(GetLastError()) + ")",
                   mtError, TMsgDlgButtons() << mbYes, 0);
  return;
} // конец IF out = false

if (out) // если старт удачен... out=true
{
  if (RuleParent == 0) // если родитель должен ждать
                        // окончания работы потомка
   {
    CloseHandle(pi.hThread); // хэндл потока уже не нужен - удаляем
    // начинаем бесконечный цикл ожидания...
    if (WaitForSingleObject(pi.hProcess, INFINITE) != WAIT_FAILED)
    {
      GetExitCodeProcess(pi.hProcess, &dwExitCode); // если
                                         // ошибка функции ожидания...
      if (RuleMessage) // если задан режим выдачи сообщений об ошибках
      if (dwExitCode != WAIT_OBJECT_0) // WAIT_OBJECT_0 = естественное
                                           // завершение процесса
      MessageDlg("Извините, процесс\n\r\n\r" +
                    UpperCase(CommandLine) +
                    "\n\r\n\rзакончен с ошибкой " +
                    IntToStr(dwExitCode) + "\n\r",
                    mtError, TMsgDlgButtons() << mbOK, 0);