|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|||||||||||
Watchdog на основе таймеров POSIX29.12.2019, 22:41. Показов 9087. Ответов 65
Метки нет (Все метки)
Добрый день, решил написать watchdog для сервера и чтобы не тратить зазря процессрное время решил реализовать это на основе таймеров POSIX, а не через создание отдельного потока.
Почитал документацию и остались некоторые вопросы: 1)Как должна быть организована проверка что сигнал пришёл от созданного мною таймера, а не от стороннего приложения ? Сечас в обработчик приходит _si->si_pid == 0 2)Как сделать сброс таймера т.е. чтоб начинал считать по новому ? это всётаки watchdog. 3)Как подружить мой watchdog и std::getline(cin, str_command ? 4)Надо ли вызывать предыдущие обработчики если я их не создавал ? 5)Надо ли делать задержку после вызова timer_settime ? 6)Какой тип таймера выбрать ? CLOCK_REALTIME меня смущает что ктото мжет перевести время. код внизу watchdog.cpp
0
|
|||||||||||
| 29.12.2019, 22:41 | |
|
Ответы с готовыми решениями:
65
WatchDog Пробуждение по watchdog WatchDog в Python |
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
||
| 08.01.2020, 12:24 | ||
|
Поэтому: Если ваши действия вписываются в список разрешенных действий из обработчика сигнала - используйте таймер на сигналах. В windows придется делать что-то другое. Добавлено через 6 минут _______________ Я бы сделал процесс, с polling`ом timeprfd и pipe. Через pipe оповещаем watchdog о необходимости сброса таймера из обычного контекста выполнения. Для перехвата критических ошибок делаем обработку сигналов, в которой через тот же pipe (запись в pipe из обработчика разрешена) оповещаем watchdog-процесс о необходимости сброса.
0
|
||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
||
| 08.01.2020, 13:29 [ТС] | ||
|
Давайте для начала заглянем сюда: /proc/interrupts с помощью cat /proc/interrupts Лично у меня на нулевом прерывании, не поверите, но такая штука как таймер. Далее, как вы сами согласились ранее таймер это объект ядра. Не счётчик, а именно таймер. Причём объект ядра он и в винде и в линуксе и более того обе оси предоставляют необходимый сервис для того чтобы поюзать этот самый таймер, а значит нет смысла пытаться сделать свой сурогат на отдельном потоке.
0
|
||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
||
| 08.01.2020, 13:40 | ||
|
Вы писали про "кроссплатформенный" таймер. Я вам ответил про кроссплатформенный таймер. Как раз именно потому, что он объект ядра - решение без "суррогатов в отдельном потоке" не будет кроссплатформенным.
0
|
||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
||
| 08.01.2020, 13:44 [ТС] | ||
|
В Qt взяли и сделали таймер. Он вполне себе кроссплатформенный, но Qt шибко толстый, поэтому мой взор обратили на себя posix либы.
0
|
||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
|||
| 08.01.2020, 13:55 | |||
|
Там тот же самый polling если что, да только не для объекта ядра таймера, а прямо в userspace, на основе таймаута самой функции poll\select. Добавлено через 6 минут Еще раз: решения, эксплуатирующие только один поток могут быть: 1) на основе polling`а (poll\select\epoll, WaitForSingleObject из WinAPI) 2) на основе сигналов. Кроссплатформенные решения с polling`ом есть - asio, Qt. Вы сказали, что поллинг не подходит (почему не подходит - не совсем ясно - есть подозрение, что вы просто не разобрались как их готовить). Дальше я на основе вашего ответа говорю, что тогда для вас остались только сигналы (если не делать второй поток - явно или неявно), для них кроссплатформенного решения - нет. Вопросы?
0
|
|||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
||
| 08.01.2020, 14:12 [ТС] | ||
|
Пришлось писать системные обработчики перехвата клавишь с клавиатуры. Вот у меня щас в основном потоке пользовательский ввод есть через std::cin и никакой поллинг поэтому там невозможен. У меня щас нет винды под рукой чтоб тестировать вариант для винды. да и самм сервисы могут эволюционировать поэтому лучше когда это ответсвенность либы, а не моя. С сигналами в винде непонятно как обстоят дела. Вроде как они должны быть раз уж ввели std::signal, но тайиера там с сигналами не дружат.
0
|
||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
||
| 08.01.2020, 14:16 | ||
|
У меня есть небольшой пример (не для Qt) ка ктакое организуется в принципе. Могу показать, если нужно.
0
|
||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
||
| 08.01.2020, 14:20 [ТС] | ||
|
0
|
||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
|||
| 08.01.2020, 15:06 | |||
|
SEH - может заменить сигналы в вин, но только для критических ошибок. А в UNIX сигналы это нечто большее, чем обработка ошибок. Для сигналов в Win отдельное API, которое опять же завязано на polling. Примеры: https://docs.microsoft.com/ru-... er-objects (поллинг через WaitForSingleObject) https://docs.microsoft.com/ru-... ing-timers (поллинг через очередь событий) Есть еще: https://docs.microsoft.com/en-... (v%3Dvs.85) (в отдельном потоке) Добавлено через 1 минуту
0
|
|||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|||
| 08.01.2020, 15:30 [ТС] | |||
|
0
|
|||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
|||||||
| 08.01.2020, 15:57 | |||||||
0
|
|||||||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
||
| 08.01.2020, 17:26 [ТС] | ||
|
https://docs.microsoft.com/en-... procedures https://docs.microsoft.com/en-... dfrom=MSDN Добавлено через 9 минут Хотя нет, вспомнил. Процедуру главного окна надо зарегистрировать прежде она будет вызываться. Так что ваш вариант более изначальный. Добавлено через 1 час 6 минут Но процедура главного окна вызывается операционной системой асинхронно работе основного потока. Скорей всего в основном потоке ненадолго приостанавливая его. И это по сути эквивалент обработчика сигналов. Хотя конечно есть существенные отличия между этими механизмами.
0
|
||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
||||
| 08.01.2020, 17:31 | ||||
|
DispatchMessage: https://docs.microsoft.com/en-... tchmessage в этом же цикле.
0
|
||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
||
| 08.01.2020, 17:33 | ||
|
Никаких претензий по качеству кода, архитектуре, целостности, работоспособности и т.п. по нему не принимаю
0
|
||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|||
| 08.01.2020, 18:29 [ТС] | |||
Я почемуто был уверен что дело обостоит именно так как я описал. Но я много лет не касался этой темы.Добавлено через 47 минут Но переделывать ничего не буду. Если в винде все таймеры работают только через опрос (polling), значит для винды вотчдога не будет. Смысла не вижу просто.
0
|
|||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|||||||||||
| 09.01.2020, 04:00 [ТС] | |||||||||||
|
Может кто нибудь знает почему здесь функция завершается с ошибкой:
0
|
|||||||||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
|
| 09.01.2020, 08:42 | |
|
squareroot, я бы посмотрел на полный, компилируемый пример, воспроизводящий эту проблему.
0
|
|
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|||||||
| 09.01.2020, 15:46 [ТС] | |||||||
0
|
|||||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
||
| 09.01.2020, 16:29 | ||
|
0
|
||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
||
| 09.01.2020, 16:57 [ТС] | ||
Вы не против если я вернусь к этой теме чуть позже ?
0
|
||
| 09.01.2020, 16:57 | |
|
Помогаю со студенческими работами здесь
60
Watchdog из Arduino Внешний WAtchdog AvrSudio и watchdog Analog Watchdog (AWD) Cortex m0 и watchdog таймер Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью.
Данные берутся из регистра сведений, по которому настроено. . .
|
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y
Z4Tv2zpXVVo
https:/ / github. com/ shumilovas/ med2. git
|
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа.
В качестве фильтра для отбора справочника служит группа номенклатуры.
Отбор по наименованию группы. . .
|
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
|
|
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс.
Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
|
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа.
В качестве фильтра для отбора служит значение перечислений.
/ / Событие "НачалоВыбора" реквизита на форме. . .
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|