Главная страница
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.016 c
14-50432
Soft
2003-05-28 11:42
2003.06.16
В чем смысл смысла?


1-50358
Pattern
2003-06-02 21:52
2003.06.16
---|Ветка была без названия|---


9-50188
Drimmer
2003-01-03 18:36
2003.06.16
бесконечный поворот мыши


1-50317
OlegM
2003-06-03 12:09
2003.06.16
Почему image не меняет свои размеры


14-50499
Мыш
2003-05-30 06:13
2003.06.16
Куда мы катимся?