Как повесить обработчик на NTP?

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Как повесить обработчик на NTP?

Сообщение VirtUX » 23.05.2021 19:51:16

Задача: вовремя среагировать на изменение системного времени, во время синхронизации его с NTP сервером.
Кроссплатформенно.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Как повесить обработчик на NTP?

Сообщение olegy123 » 24.05.2021 13:54:20

Проще самому получать время клиентом NTP и если нужно делать синхронизацию, посылать сообщения, SMS, Telegram-ить, выключать свет и запускать двигатели звездолета..
все это будет кроссплаторменно.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Как повесить обработчик на NTP?

Сообщение VirtUX » 24.05.2021 14:42:08

Мне нужно отследить момент, когда ОС сама выполнит синхронизацию времени, или пользователь вручную это сделает, или какое стороннее приложение это сделает. Мне как раз ненужно, чтобы время НЕ менялось. И поэтому нужно успеть среагировать на изменение системного времени.

Параллельный вопрос:
Как реализовать собственный "стабильный" таймер, который не будет зависеть в течение одних-двух суток от любых изменений системного времени, и будет четко выдавать собственное время?
Запустил пользователь приложение. Включился собственный таймер. Синхронизировался с системным временем. Пользователь, стороннее ПО или ОС изменили системное время, а собственный таймер продолжает выдавать нужное время, как-будто время никто не менял. Постоянно синхронизировать его по NTP нельзя. Так как - это будет тоже самое, что и довериться ОС. Любое изменение времени между стартом приложения и текущим моментом - вызовет ошибку в расчетах. При этом постепенное отставание или опережение (в зависимости от железа ПК) реального времени - не вызовет ошибку в расчетах. Точность определения текущего времени = 1 миллисек.
Возможно решением будет использование GetTickCount. Но не уверен, что в течение 2 суток, он будет стабильно выдавать разницу между стартом приложения и текущим моментом...
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Как повесить обработчик на NTP?

Сообщение olegy123 » 24.05.2021 15:11:10

VirtUX писал(а):Мне нужно отследить момент, когда ОС сама выполнит синхронизацию времени
OS это черный ящик, если есть внутри этого ящика подписка на событие изменения времени по NTP то ваша цель решена, разумеется каждая OS по своему думает.
погуглил есть у Windows событие WM_TIMECHANGE которое вызывается когда время изменяется.

VirtUX писал(а):Как реализовать собственный "стабильный" таймер... Пользователь, стороннее ПО или ОС изменили системное время, а собственный таймер продолжает выдавать нужное время, как-будто время никто не менял. Постоянно синхронизировать его по NTP нельзя.
Вы хакингом занимались? Там этот вопрос крайне остро стоит, хотя бы тем что можно целую OS посадить на VM через который может дебажить код взад и вперед. GetTickCount - это очень ненадежно.

Выходы только два: 1) это быть постоянно онлайн и клиента жестко контролировать, туда можно отнести сертификаты которые имеют свой срок жизни и требовать подтверждения легальности у всяких центров подтверждения, они точно имеют независимые часы, если сертификат исток, то при следующей проверки - они вам сообщат отрицанием подтверждения.
2) иметь аппаратные ключи, типа HASP. Они имеют на борту свои энергонезависимые часы, в них, в некоторых аппаратных ключах можно разместить даже свой код, который может чекать сессии.

Других вариантов нет.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Как повесить обработчик на NTP?

Сообщение VirtUX » 24.05.2021 15:46:34

olegy123 писал(а):Windows событие WM_TIMECHANGE

Не кроссплатформенно. А CM_TIMECHANGE еще не реализовано, - ждём...
olegy123 писал(а):Вы хакингом занимались?

Нет. Бюджетными тайминговыми системами для соревнований.
olegy123 писал(а):2) иметь аппаратные ключи, типа HASP

Спасибо! Это вариант.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Как повесить обработчик на NTP?

Сообщение olegy123 » 24.05.2021 16:43:36

VirtUX писал(а):Не кроссплатформенно.
разумеется, что не кроссплатформенно. Но под каждую платформу можно заточить событие на изменение системных часов, в линуксе пишут нужно ловить TFD_TIMER_CANCEL_ON_SET в функции timerfd_settime

VirtUX писал(а):Спасибо! Это вариант.
если нужно "сделать сам" и подешевле то могу посоветовать смастерить донгл на базе STM32, в чипе есть внутренние часы 8Мгц (RC -резистор-конденсатор), можно закварцеровать, точность резко возрастет. стоимость ~100/300 рублей. Купить все детали можно в любом магазине радиокомпонентов.
Связь можно наладить по USB-UART(STM эмулирует линк UART(Com-порт) по USB, в Windows/Linux появится устройство Com-порт) и питание подвести 5в. И свой хитрый код зашить в этот ARM
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10

Рейтинг@Mail.ru