Текущий архив: 2003.06.16;
Скачать: CL | DM;
ВнизХочу сделать архивирование по расписанию Найти похожие ветки
← →
Song (2003-06-03 10:23) [0]Отсюда вопрос: как это сделано в Windows? Сразу приходит в головку сделать таймер с проверкой на нужное время. Но такой вариант будет давать загрузку 100% на проц. В винде вот никакой нагрузки нет, и исполняется в шедулере всё в любое время. Вообщем кто как делал в своих программах (если делал).
← →
Cobalt (2003-06-03 10:38) [1]Что за глупость? Ставь интервал таймера не на 1 сек. и проверять время, а вычисляй разницу между указанным временем и текущим, это и будет нужный интервал. Т.е. через это время тебе надо будет что-то сделать.
Хм.... по-моему, кто-то взломал пароль Song"а :)
← →
Song (2003-06-03 10:44) [2]Нет, никто не взломал.
Так-то я и сам знаю. А по-другому? Не думаю, что в Windows таймер идёт.
← →
Skier (2003-06-03 10:45) [3]>Song © (03.06.03 10:44)
Извини, конечно, но по-моему ты просто усложляешь себе жизнь...:)
← →
Song (2003-06-03 10:52) [4]Расшифруй :)
← →
Skier (2003-06-03 10:55) [5]
> Но такой вариант будет давать загрузку 100% на проц.
> Не думаю, что в Windows таймер идёт.
Не думаю что это логично. :)
← →
Юрий Зотов (2003-06-03 10:56) [6]Принцип такой. Сначала Sleep на время, немного меньшее нужного. Затем еше один Sleep, уже на нужное. Затем действия. Двухшаговый Sleep снижает погрешность.
Надо только продумать, как разбудить программу при завершении работы системы. Вероятно, должно быть два потока. Главный создает любой объект ядра и запускает второй. Второй вызывает WaitForSingleObject (вмеcто Sleep) и делает то, что описано выше. Если главный поток получил WM_QUERYENDSESSION, он освобождает объект ядра, благодаря чему второй поток просыпается и завершает работу, ничего не делая. После чего завершается и вся программа.
← →
Palladin (2003-06-03 11:00) [7]хм, а у потоков приоритет отменили уже?
и rar в фоновом режиме не хило жрет процессора, если только приоритет опять же не уменьшить...
может я в чемто не прав?
← →
panov (2003-06-03 11:29) [8]2 варианта:
Процессорное время не тратится почти.
1. В отдельном потоке с высоким приоритетом.
procedure TMTimer.Execute;
var
Interval,Delta: Integer;
begin
Delta := 10;
while (not Terminated) and (Interval>0) do
begin
Dec(Interval,Delta);
Sleep(Delta);
if Terminated then break;
TickTimer; //процедура для выполнения
end;
2. Почти такой же, но используя объекты синхронизации
← →
Anatoly Podgoretsky (2003-06-03 11:47) [9]А стандартные средства планировщика Виндоус не подходят, они хорошо документированы в MSDN.
Если нет то SLEEP
← →
vuk (2003-06-03 12:12) [10]Для NT-based ОС можно ещё WaitableTimer использовать...
← →
Song (2003-06-03 14:30) [11]Всем спасибо, сделал.
Страницы: 1 вся ветка
Текущий архив: 2003.06.16;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.007 c