Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.06.16;
Скачать: [xml.tar.bz2];

Вниз

Хочу сделать архивирование по расписанию   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.019 c
14-50430
Soft
2003-05-28 13:09
2003.06.16
САГА О ПРОГРАММИСТАХ-КУДЕСНИКАХ (страшилка в стихах и прозе)


1-50364
Doc
2003-06-03 18:34
2003.06.16
Application или Self?


14-50452
sniknik
2003-05-29 17:52
2003.06.16
Детские приколы


8-50406
Jel
2003-03-04 10:04
2003.06.16
Воспроизведение Smacker анимации


1-50351
Zigs
2003-06-03 19:33
2003.06.16
Подскажите, плз, как прижатии кнопки (TButton) вписать символ





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский