Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ограниченное время выполнения чужой программы, Проверьте код. Ошибка ERangeError 
V
    Опции темы
ЧеловекБорща
  Дата 18.12.2010, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 5.6.2010

Репутация: нет
Всего: нет



Всем доброго времени суток! 

Уважаемые гуру, просьба пояснить что не так с кодом:
Код

        if not AppInfo.EveryDayRestarting_flag then //Если нет флага "Выключить в заданное время".
        begin
          HLR_ApplicationsLog('Thread waiting end of process time is infinite.'); //запись в лог
          WaitForSingleObject(hProcess, INFINITE); //Следим постоянно 
          CloseHandle(hProcess); 
          CloseHandle(hThread); 
        end
        else 
        begin
          HLR_ApplicationsLog('Thread waiting end of process time is 500 ms'); //лог
          repeat
            WaitResult := WaitForSingleObject(hProcess, 500); //Сюда результат типа WORD

            case AppInfo.EvDayRestartType of  [color=red]{Вот тут вещается и пишет ERangeError ПОЧЕМУ?}[/color]
         //Тип работы

              0: //Перезапуск в указаанное время
                begin
                  if WaitResult = WAIT_TIMEOUT then //Если WAIT_TIMEOUT
                  begin
                    j1 := CompareTime(Now, AppInfo.RestartInTime); //сюда реузьтат сравнения
                    if (j1 = 0) or (j1 = 1) then
                    begin
                      HLR_ApplicationsLog('Application restarted by thread.');
                      TerminateProcess(Pi.hProcess, 0); //вешаем процесс
                      CloseHandle(hProcess); //закрываем хендл
                      CloseHandle(hThread);
                    end;
                  end;
                end;

              1: //Закрытие программы
                begin
                  if WaitResult = WAIT_TIMEOUT then
                  begin
                    j1 := CompareTime(Now, AppInfo.RestartInTime);
                    if (j1 = 0) or (j1 = 1) then
                    begin
                      HLR_ApplicationsLog('Application CLOSED by thread.');
                      AppInfo.ActiveTask := False; //Выключаем выполнение задачи, выход из reprat 
                      TerminateProcess(Pi.hProcess, 0); //Вешаем процесс 
                      CloseHandle(hProcess);
                      CloseHandle(hThread);
                      Terminate; //Вешаем поток
                      Break; //Вешаем цикл
                    end;
                  end;
                end;
            end;
          until WaitResult <> WAIT_TIMEOUT; //повторять пака
        end;
      end;


Правельно ли я делаю? 

Что делает даный код?
Берёт информацию из  переданной потоку структуры. 
Код

AppInfo.EveryDayRestarting_flag TRUE или FALSE //Флаг отвечает выполнять ли код закрытия/перезапуска в указанное время
AppInfo.EvDayRestartType 0 или 1 //Тип работы 0 - перезапуск, 1 - выключение.


Проблема:
не идёт дальше 
Код

case AppInfo.EvDayRestartType of 


Хоть бери и вешайтя, но программа так и делает. Но с ошибкой ErangeError.


Я в тупике, ПОЧЕМУ? 
-1 там никаким образом не передаётся(Трассировкой смотрел).
PM MAIL   Вверх
ЧеловекБорща
Дата 18.12.2010, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 5.6.2010

Репутация: нет
Всего: нет



ахах забываю выключать проверку RangeError =)  smile 
Буду пользоваться:
Код

{$R-} //Disable Range Checking
{$R+} // Enable Range checking



Это сообщение отредактировал(а) ЧеловекБорща - 18.12.2010, 21:19
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0438 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.