Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2011, 20:14   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,430
По умолчанию циклы Repeat 2 таких цикла конфликтуют

Всем привет=)

Естьвот таких два цикла:

Первый:
Код:
        if not AppInfo.ForceAffAndPriorChanging_flag then
        begin
          HLRLog.HLR_ApplicationsLog('Flag compulsory issuing of priority and bind programs to specified CPU cores is not specified.');
          //ждём постоянно
          WaitForSingleObject(PI.hProcess, INFINITE);
        end
        else
        begin
          HLRLog.HLR_ApplicationsLog('Forced display of the flag of priority and bind programs to specified CPU cores.');
          repeat
            //Задаём период ожидания ответа, 1 секунда
            WaitResult2 := WaitForSingleObject(PI.hProcess, 1000);
            HLRLog.HLR_ApplicationsLog('Validation period response of 1 second (1000 milliseconds).');
            if WaitResult2 = WAIT_TIMEOUT then
            begin
                SetProcessAffinityMask(PI.hProcess, AppInfo.CPUAffinity);
                SetPriorityClass(PI.hProcess, GetPriority(AppInfo.CPUPriority));
            end;
          until WaitResult2 <> WAIT_TIMEOUT;
        end;
И второй:
Код:
        //процесс перезапуска в назначенный день
        if not AppInfo.EveryDayRestarting_flag then //Если нет флага выключить В.
        begin
          HLRLog.HLR_ApplicationsLog('Thread waiting end of process time is infinite.');
          WaitForSingleObject(PI.hProcess, INFINITE); //Следим постоянно
        end
        else
        begin
          HLRLog.HLR_ApplicationsLog('Thread waiting end of process time is 500 ms');
          repeat
            WaitResult := WaitForSingleObject(PI.hProcess, 500);
            case AppInfo.EvDayRestartType of
              0:
                begin
                  if WaitResult = WAIT_TIMEOUT then
                  begin
                    d1 := CompareTime(Now, AppInfo.RestartInTime); //сравниваем заданное время с текущим
                    d2 := CompareDate(Now, AppInfo.RestartInDate); //сравнваем заданную дату с текущей
                    if ((d1 = 0) or (d1 = 1) and (d2 = 0)) then
                    begin
                      {Если время совпало или уже прошло, а дата совпала значит перезапуск}
                      HLRLog.HLR_ApplicationsLog('Application restarted by thread.');
                      TerminateProcess(Pi.hProcess, 0);
                      CloseHandle(PI.hProcess);
                      CloseHandle(PI.hThread);
                      AppInfo.EveryDayRestarting_flag := False; //выключаем опцию, чтобы не повторялось
                      Synchronize(AppIsRestarting);
                    end;
                  end;
                end;

              1:
                begin
                  if WaitResult = WAIT_TIMEOUT then
                  begin
                    d1 := CompareTime(Now, AppInfo.RestartInTime);
                    d2 := CompareDate(Now, AppInfo.RestartInDate);
                    if ((d1 = 0) or (d1 = 1)) and (d2 = 0) then
                    begin
                      HLRLog.HLR_ApplicationsLog('Application CLOSED by thread.');
                      AppInfo.ActiveTask := False;
                      TerminateProcess(Pi.hProcess, 0);
                      CloseHandle(PI.hProcess);
                      CloseHandle(PI.hThread);
                      Synchronize(AppIsStopped);
                      Terminate; //вешаем поток
                      Break; //выходим из цикла
                    end;
                  end;
                end;
            end;
          until WaitResult <> WAIT_TIMEOUT;
        end;
проблема в том, что если выполняется один, то неможет выполнятся второй. Как эту задачку решить? Чтоб они могли оба выполняться...
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программа с использованием цикла с постусловием(repeat) MARine_life Фриланс 5 09.03.2010 21:28
Оператор цикла с постусловием (REPEAT) RUSSTUDENT Помощь студентам 2 18.01.2010 23:36
Оператор цикла с постусловием (цикл REPEAT) 0001 Помощь студентам 3 18.01.2010 00:02
Оператор цикла с предусловием While. Оператор цикла с пост условием Repeat McMilin Помощь студентам 7 11.11.2007 14:10