Всем привет=)
Естьвот таких два цикла:
Первый:
Код:
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;
проблема в том, что если выполняется один, то неможет выполнятся второй. Как эту задачку решить? Чтоб они могли оба выполняться...