Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.01 c
14-50469
ZORGON
2003-05-30 11:04
2003.06.16
Site


1-50274
kull
2003-06-04 13:26
2003.06.16
Генерация HTML текста...


14-50479
Начинающий шароварщик
2003-05-28 17:24
2003.06.16
Феномен софтверной Индии


7-50548
Scorp
2003-04-10 21:26
2003.06.16
Документация по TAPI


6-50412
anpv
2003-04-11 08:51
2003.06.16
!!! Быстрее чем NMFTP !!!