Форум: "WinAPI";
Текущий архив: 2008.01.13;
Скачать: [xml.tar.bz2];
ВнизСообщение Windows о смене суток Найти похожие ветки
← →
Jetus © (2007-06-11 12:24) [0]Здравствуйте!
Как отловить момент смены суток в Windows?
← →
Джо © (2007-06-11 12:58) [1]Нету такого сообщения.
← →
jetus © (2007-06-11 13:33) [2]И что делать? Брать тупо в таймере проверять?
← →
homm © (2007-06-11 13:33) [3]> Как отловить момент смены суток в Windows?
В Windows сутки не меняются.
← →
homm © (2007-06-11 13:35) [4]> И что делать? Брать тупо в таймере проверять?
Один раз проверить и поставить таймер на нужное время — не сутьба?
Хотя трабла в том, что таймер вроде только на минуту поставить.
1) Проверяем время каждую минуту
2) если до смены суток времени больше минуты, делаем 1)
3) Ставим таймер на оставшееся время доконца той минуты, когда сутки истекут.
нужно еше каконить флаг наверное, в каком режиме таймер работает, минутном, или уже ждем непосредственно смены.
← →
Джо © (2007-06-11 13:55) [5]> [4] homm © (11.06.07 13:35)
> Хотя трабла в том, что таймер вроде только на минуту поставить.
Неправда.
← →
homm © (2007-06-11 14:02) [6]> [5] Джо © (11.06.07 13:55)
> Неправда.
Было правдой для win95 и VB5. Стех пор ни разу не понадобилось больше, так что текущее положение дел не знаю.
← →
jetus © (2007-06-11 14:25) [7]Изначально так и думал. просто решил - зачем париться если есть соответствующее сообщение.
Ну, раз нету, буду делать таймером.
Спасибо всем.
← →
Eraser © (2007-06-11 14:43) [8]> [6] homm © (11.06.07 14:02)
> Было правдой для win95 и VB5
Скорее всего только для VB5, хотя ни разу не работал с этим продуктом.
А насчет ограничения в win95 - гугл и msdn по этому поводу молчит, проверить пока что возможности нет, но на сколько помню - ограничений там не было, не считая конечно ограничения dword (около 40 суток).
← →
DrPass © (2007-06-12 11:55) [9]
> А насчет ограничения в win95
Реальное разрешение таймера в win95 было около 50 мс, насколько я помню.
← →
Eraser © (2007-06-12 13:00) [10]> [9] DrPass © (12.06.07 11:55)
угу 55 по-моему, но тут речь про максимальный интервал, а не про дискретность.. вроде бы.
← →
Углук © (2007-06-14 02:39) [11]В сутках 86400000 миллисекунд.
Установить таймер на такой интервал.
← →
KSergey © (2007-06-14 17:40) [12]А прога точно в это время будет работать? Или реагировать надо только когда прога работает?
Ааа, календарь! :)
← →
homm © (2007-06-14 17:47) [13]> В сутках 86400000 миллисекунд.
> Установить таймер на такой интервал.
Угу, имеено так и нужно отлавливать момент смены суток в виндовс.
Сломаные часы тоже время иногда показывают правльно :)
← →
Углук © (2007-06-15 02:04) [14]
> homm © (14.06.07 17:47) [13]
Таймер запустить в 00:00. Слабо?
← →
Углук © (2007-06-15 02:10) [15]Еще: подсчитать, сколько времени от запуска программмы пройдет до смены суток. Это нетрудно. Изменить интервал таймера. После первого срабатывания изменить интервал таймера на указанное мной число.
← →
homm © (2007-06-15 10:20) [16]> Таймер запустить в 00:00. Слабо?
Ага, когда я буду знать что сейчас 00:00, будет не слабо. Предлагаешь это дело на пользователя переложить?
> Еще: подсчитать, сколько времени от запуска программмы пройдет
> до смены суток.
Это как-то корелирует с тем, что было в [11] ??
сказал же чушь, еше доказывает, что прав.
-1 в общем.
← →
tesseract © (2007-06-15 12:21) [17]
> В сутках 86400000 миллисекунд.Установить таймер на такой
> интервал.
погрешность таймера ужасная. Имейте в виду.
← →
keymaster © (2007-06-15 12:24) [18]
> Углук © (15.06.07 02:10) [15]
> После первого срабатывания изменить интервал таймера на
> указанное мной число.
При таком подходе программа должна работать сутки...
← →
Anatoly Podgoretsky © (2007-06-15 13:36) [19]> homm (15.06.2007 10:20:16) [16]
Программист в состояние пользоваться операциями сложения и вычитания!!!
← →
Anatoly Podgoretsky © (2007-06-15 13:36) [20]> keymaster (15.06.2007 12:24:18) [18]
Лучше несколько
← →
Anatoly Podgoretsky © (2007-06-15 13:37) [21]> tesseract (15.06.2007 12:21:17) [17]
Ну и что, нужна ли высокая точность для определения сего факта?
← →
homm © (2007-06-15 13:40) [22]> Программист в состояние пользоваться операциями сложения
> и вычитания!!!
Это к чему? Я в курсе таких операций, потому и предложил в [4] «Один раз проверить и поставить таймер на нужное время». А вот автор 11-го поста не в курсе.
← →
Anatoly Podgoretsky © (2007-06-15 16:10) [23]> homm (15.06.2007 13:40:22) [22]
Вроде бы это ты не можешь
> Ага, когда я буду знать что сейчас 00:00, будет не слабо. Предлагаешь это дело на пользователя переложить?
← →
homm © (2007-06-15 16:45) [24]> Вроде бы это ты не можешь
Это Вы привели мой ответ на реплику «Запускать в 00:00 слабо?». Тогда как Вам угодно. Человек скал чушь,а чего там имел ввиду, чего считать, чего не считать не мое дело.
← →
Eraser © (2007-06-15 17:07) [25]не стал бы я таймер подобным образом использовать..
если погрешность около минуты не старшна, проверял бы каждую минуту изменилась ли дата, если да - выполнить нужную операцию. т.о. можно учесть смену настроек времени.
← →
WaitableTimer (2007-06-15 18:24) [26]Ребята, ну о чем тут такой долгий спор?
Разве никто не слышал о Waitable Timers?
Создал, установил на ближайшую полночь и не паришься, ждешь event"а...
(Работает, начиная с Windows 98 / NT 4.0 .)
← →
Eraser © (2007-06-15 19:04) [27]> [26] WaitableTimer (15.06.07 18:24)
а если василий пупкин время поменял на компе, или в другой часовой пояс самолет улетел?
← →
Anatoly Podgoretsky © (2007-06-15 19:08) [28]> Eraser (15.06.2007 17:07:25) [25]
Без разницы какой интервал, нет никакой необходимости делать это каждую минуту, результат будет абсолютно одинаков.
← →
WaitableTimer (2007-06-15 19:15) [29]
> ... в другой часовой пояс самолет улетел?
Используется UTC-time.
> а если василий пупкин время поменял на компе...
Ничто не спасет кроме постоянного мониторинга. Можно хук на системный вызов поставить, но время можно и через BIOS поменять...
Думаю, это не та задача, решение которой было нужно вначале.
Вы предполагаете, что пользователь - преступник, и хотите это побороть.
Если да, то переформулируйте задачу.
← →
Джо © (2007-06-16 03:05) [30]> [29] WaitableTimer (15.06.07 19:15)
> Вы предполагаете, что пользователь - преступник, и хотите
> это побороть.
Отчего же преступник? Он просто время поменял :)
← →
Германн © (2007-06-16 03:33) [31]
> WaitableTimer (15.06.07 19:15) [29]
>
...
> Думаю, это не та задача, решение которой было нужно вначале.
>
А, собс-но какая задача тут была озвучена?
Никакой задачи и не было!
← →
WaitableTimer (2007-06-16 10:32) [32]Вопрос:
> Германн © (16.06.07 03:33) [31]
> А, собс-но какая задача тут была озвучена?
> Никакой задачи и не было!
Ответ:
> Jetus © (11.06.07 12:24)
> Как отловить момент смены суток в Windows?
← →
Anatoly Podgoretsky © (2007-06-16 12:16) [33]> WaitableTimer (16.06.2007 10:32:32) [32]
А что такое смена суток?
← →
Anatoly Podgoretsky © (2007-06-16 12:20) [34]
> Отчего же преступник? Он просто время поменял :)
Против подобных преступников есть WM_TIMECHANGE
А для обычных пользователей операция вычитания
← →
WaitableTimer (2007-06-16 14:58) [35]
> Anatoly Podgoretsky © (16.06.07 12:16) [33]
> А что такое смена суток?
Согласен, задача недостаточно формализована. Поэтому и ответил в рамках того, как понял.
← →
Углук © (2007-06-17 16:24) [36]2homm,
[I] скал чушь [/I]
Да не уж то?
Мой способ один раз вычисляет временную разницу, переводит в микросекунды, и преспокойно устанавливает её в интервал таймера- после запуска программы, - а после первого срабатывания OnTimer просто ставит число из [11] для определения смены суток. До срабатывания таймера приложение висит себе в памяти, и никому( кроме настырных юзеров) не мешает, процессорных ресурсов не занимает.
Ваш способ предполагает каждую минуту операции проверки времени.
Это значит, Вы не пытаетесь писать оптимальные программы, а пишете "в лоб". И поэтому мне как-то фиолетово, + или - Вы изволили присудить мне в качестве своей оценки
← →
Eraser © (2007-06-17 17:22) [37]> [36] Углук © (17.06.07 16:24)
> Ваш способ предполагает каждую минуту операции проверки
> времени.
> Это значит, Вы не пытаетесь писать оптимальные программы,
> а пишете "в лоб".
ну ну..
нужно писАть так, чтобы надежно было, как AK47, проверка времени каждую минуту занимает настолько мизерное количесвто ресурсов, что его можно смело приравнять к 0.
А всякие фокусы с вычислением каких-то интервалов и перехватом WM_TIMECHANGE внисут неразбериху, в казалось бы, простейшую задачу..
← →
Anatoly Podgoretsky © (2007-06-17 17:36) [38]В зависимости от того, что такое сутки - WM_TIMECHANGE либо нужен, либо не нужен, и не зависит от метода.
← →
Углук © (2007-06-17 18:08) [39]
> проверка времени каждую минуту занимает настолько мизерное
> количесвто ресурсов, что его можно смело приравнять к 0.
>
И все же займет... А что касается
> фокусы с вычислением каких-то интервалов
Если для Вас это фокусы, тогда что же для Вас, скажем, преобразование Фурье? Китайская грамота?
← →
Углук © (2007-06-17 18:10) [40]
> неразбериху, в казалось бы, простейшую задачу..
Разберитесь...станете умнее
← →
Eraser © (2007-06-17 19:00) [41]> [39] Углук © (17.06.07 18:08)
я тут никого не переубеждаю, просто высказываю свое мнение, как делал я бы, а вы делайте как знаете..
только не удивляйтесь потом, что в проекте через пару лет появится какой-нибудь трудноуловимый баг, на поимкой которого будет заниматься весь отдел в течении недели.
← →
Углук © (2007-06-17 19:44) [42]
> Eraser © (17.06.07 19:00) [41]
Совет принят .
← →
homm © (2007-06-17 21:22) [43]> Ваш способ предполагает каждую минуту операции проверки
> времени.
> Это значит, Вы не пытаетесь писать оптимальные программы,
> а пишете "в лоб". И поэтому мне как-то фиолетово, + или
> - Вы изволили присудить мне в качестве своей оценки
Ветку читал? Помоему там подробно изложено почему я так предложил делать.
> Мой способ один раз вычисляет временную разницу, переводит
> в микросекунды, и преспокойно устанавливает её в интервал
> таймера- после запуска программы, - а после бла бла бла бла
Дак вот и нужно писать то, что ты предлагаешь, а то что в [11] чушь и феловек далекий, от преобразований фурье поймет запросто.
← →
homm © (2007-06-17 21:23) [44]> чушь и феловек далекий
чушь, и человек далекий
← →
Углук © (2007-06-17 21:53) [45]
> Ветку читал? Помоему там подробно изложено почему я так
> предложил делать.
А если программа проработает больше суток? "один раз поставить" не сработает.
Касательно свойства Interval: имеет тип Cardinal - это 9 миллиардов.
Почему [11] чушь? Пока я сам подробно изложил свой метод решения, а от Вас слышу оскорбления, ни основанные ни на чем. Плюс вы придумали нерабочий вариант.
← →
homm © (2007-06-18 07:26) [46]> Касательно свойства Interval: имеет тип Cardinal - это 9
> миллиардов.
Какое отношение имеет тип к опустимому интервалу значений, при которых функция будет работать? Это разные вещи.
> Почему [11] чушь?
Потому что. Прочитай вопрос, прочитай 11. Если не понял, почему чушь, повтори еще раз. Повторяй пока не дойдет. Если не дурак, число шагов должно быть конечно.
← →
Anatoly Podgoretsky © (2007-06-18 08:41) [47]
> тип Cardinal - это 9 миллиардов.
Обнови знания в справке Дельфи
← →
Virgo_Style © (2007-06-18 13:08) [48]Я бы воспользовался таймером, а чтобы убрать погрешность, ставил бы его на половину интервала до полночи, потом опять и опять... А когда интервал станет совсем небольшим, можно проверять хоть каждую секунду или вообще в цикле. Надеюсь, погрешность, хоть и ужасная, меньще 100% )
← →
Anatoly Podgoretsky © (2007-06-18 16:20) [49]> Virgo_Style (18.06.2007 13:08:48) [48]
Никакой разницы нет разбиваешь ли ты интервал на части или нет, неужели ты думаешь, что таймер работает по принципу Intervel = Interval - 1
← →
Углук © (2007-06-19 15:30) [50]
> Углук © (15.06.07 02:10) [15]
> Еще: подсчитать, сколько времени от запуска программмы пройдет
> до смены суток. Это нетрудно. Изменить интервал таймера.
> После первого срабатывания изменить интервал таймера на
> указанное мной число.
> homm © (18.06.07 07:26) [46]
> 86400000 миллисекунд.
← →
Углук © (2007-06-19 15:32) [51]property Interval: Cardinal;
> > тип Cardinal - это 9 миллиардов
Ошибся
← →
Углук © (2007-06-19 15:32) [52]property Interval: Cardinal;
> > тип Cardinal - это 9 миллиардов
Ошибся
← →
DVM © (2007-06-19 16:36) [53]Не понимаю, зачем вам так нужет таймер? Что сложно каждую секунду время/дату проверять? Не грузит это процессор совершенно, даже если 100 раз в секунду проверять. Таймеры - это лишние проблемы, это своего рода такие ненадежные костыли в любой программе.
← →
Anatoly Podgoretsky © (2007-06-19 16:47) [54]> DVM (19.06.2007 16:36:53) [53]
Как предлагаешь?
← →
DVM © (2007-06-19 17:10) [55]
> Как предлагаешь?
Я хотел сказать, что таймер не нужен для отсчета интервала размером с сутки. Им надо секунды отсчитывать а не сутки.
Если под сменой суток понимать момент когда меняется дата (а причина изменения даты тут уже не играет роли) - то все же элементарно. При старте программы или в любой другой нужный момент запоминаем дату. Раз в секунду (опять же по тому же самому таймеру) проверяем текщую дату. Как только она станет другой - сутки сменились. И не надо ставить таймер на гигантские интервалы.
Можно и вообще без таймера, но это посложнее будет - например, в потоке крутить цикл.
← →
Eraser © (2007-06-19 17:55) [56]> [55] DVM © (19.06.07 17:10)
> Можно и вообще без таймера, но это посложнее будет - например,
> в потоке крутить цикл.
можно, но это уже из мухи по воробьям, для такой операции выделять целый поток не целесообразно.
← →
Anatoly Podgoretsky © (2007-06-19 19:30) [57]> DVM (19.06.2007 17:10:55) [55]
Это естественно будет работать, а вот насчет надо ли ставить на большие интервалы, так это вопрос вкуса. Поток - ничего сложного и более оптимального, хотя бы из-за точности, приоритет много выше чем для таймерных сообщений. Нагрузка тоже минимальная и побочный эффект - для любителей крутить циклы для организации паузы - это отсутствие психологической проблемы со 100 процентной нагрузкой на ЦПУ.
Страницы: 1 2 вся ветка
Форум: "WinAPI";
Текущий архив: 2008.01.13;
Скачать: [xml.tar.bz2];
Память: 0.6 MB
Время: 0.01 c