|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
11.06.2015, 18:34 | #1 |
Пользователь
Регистрация: 20.03.2009
Сообщений: 99
|
Контроль часов
Хочу сделать защиту от перевода часов
План реализации следующий: при запуске программы в отдельном потоке фиксируем дату открытия OpenDT Затем через каждую секунду начинаем прибавлять к NowDTTick := OpenDT + 1 секунда Для проверки часов от перевода проверяем NowDTTick и Now (текущее время которое сейчас на компе) Например if NowDTTick < Now + (погрешность) значит часы перевели назад Известно что для обеспечения возможности "многозадачности" система переключается между процессами через переодическое время, соответственно потоки впадают в suspended, приостановленное состояние, а значит работа потока будет притормаживать и через некоторое время начнет иметь существенное отличие от реального времени. Вопрос: Возможно ли каким либо способом данный способ контроля времени потоком более точным? ЗЫ Условие: без выхода в интернет. Есть идея проверять например через 3-10 секунды проверку на отличие от локального времени, если отличие не более чем на две три секунды, то снова берем и отталкиваем OpenDT от времени компа. Вобщем товарищи подскажите как бы правильнее сделать. |
11.06.2015, 18:55 | #2 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
GetTickCount и время при старте запомнить. При проверке сравнить разницу между текущим GetTickCount и начальным с разницей времен текущего и начального. GetTickCount по-моему dword и милисекунды, поэтому при переполнении в ноль сбрасывается. Через 49 суток непрерывной работы если не ошибся
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
11.06.2015, 19:28 | #3 |
Пользователь
Регистрация: 20.03.2009
Сообщений: 99
|
Ща попробую через GetTickCount збацать
|
11.06.2015, 22:03 | #4 |
Пользователь
Регистрация: 20.03.2009
Сообщений: 99
|
В общем получился примерно такой код
Код:
но результат уже лучше пока отличий не видно Последний раз редактировалось Antony41; 11.06.2015 в 22:26. |
11.06.2015, 22:29 | #5 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
А зачем так часто проверка? Раз в несколько минут по таймеру вполне достаточно без этих sleep
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
12.06.2015, 10:08 | #6 |
Пользователь
Регистрация: 20.03.2009
Сообщений: 99
|
не совсем понял как обойтись без sleep, ведь тогда будет грузить ЦП на 100% в цикле While, не лучший вариант решения конечно...
|
12.06.2015, 10:09 | #7 |
Пользователь
Регистрация: 20.03.2009
Сообщений: 99
|
Кстати тест с GetTickCount'ом за ~12 часов показал очень хорошие результаты, я не заметил разницы между программным временем и системным
|
12.06.2015, 15:25 | #8 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
|
12.06.2015, 16:39 | #9 |
Пользователь
Регистрация: 20.03.2009
Сообщений: 99
|
Я понял, но тут еще и другие задачи будут стоять, поэтому необходимо всё это сделать в потоке в зацикленном, кроме этого данный поток будет через некоторое время посылать другому потоку информацию о текущем времени, а второй поток будет принимать и сохранять данную дату как время последнего выхода из программы CloseDT, это нужно для возможности проверки не перевел ли пользователь часы назад в то время когда программа была выключена. И при запуске программа будет смотреть если CloseDT > Now, значит он перевел часы назад в то время когда прога не работала. Незнаю конечно правильно ли оно всё, но это алгоритм придуманный мной и теоретически должно всё работать.
Вобще будет 3 потока третий будет синхронизировать параметры с сервером лицензирования (при доступном инете) Такая частая проверка была нужна только для теста |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
суммирование часов и минут по нарастающей, более 24 часов | razinsergey | Microsoft Office Excel | 3 | 28.05.2012 10:02 |
создание часов | noxior | Общие вопросы C/C++ | 5 | 11.02.2012 15:53 |
Сколько часов, минут и секунд прошло от начала суток до поворота часовой стрелки часов на f градусов (нужна блок-схема) | lady.ulumba | Помощь студентам | 5 | 08.09.2011 15:08 |
Стрелка часов | jonec | Общие вопросы Delphi | 2 | 17.11.2010 09:45 |
часы показывают m часов, n минут и k секунд. Каковы будут показатели часов через p часов, q минут и r сек | Паскалька^^ | Помощь студентам | 3 | 11.10.2009 19:41 |