|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|||||||||||
Watchdog на основе таймеров POSIX29.12.2019, 22:41. Показов 9735. Ответов 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 |
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 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
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 08.01.2020, 13:40 | ||
|
Вы писали про "кроссплатформенный" таймер. Я вам ответил про кроссплатформенный таймер. Как раз именно потому, что он объект ядра - решение без "суррогатов в отдельном потоке" не будет кроссплатформенным.
0
|
||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
||
| 08.01.2020, 13:44 [ТС] | ||
|
В Qt взяли и сделали таймер. Он вполне себе кроссплатформенный, но Qt шибко толстый, поэтому мой взор обратили на себя posix либы.
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||
| 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
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 08.01.2020, 14:16 | ||
|
У меня есть небольшой пример (не для Qt) ка ктакое организуется в принципе. Могу показать, если нужно.
0
|
||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
||
| 08.01.2020, 14:20 [ТС] | ||
|
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||
| 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
|
|||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||||||
| 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
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||||
| 08.01.2020, 17:31 | ||||
|
DispatchMessage: https://docs.microsoft.com/en-... tchmessage в этом же цикле.
0
|
||||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 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
|
|||||||||||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|
| 09.01.2020, 08:42 | |
|
squareroot, я бы посмотрел на полный, компилируемый пример, воспроизводящий эту проблему.
0
|
|
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|||||||
| 09.01.2020, 15:46 [ТС] | |||||||
0
|
|||||||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 09.01.2020, 16:29 | ||
|
0
|
||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
||
| 09.01.2020, 16:57 [ТС] | ||
Вы не против если я вернусь к этой теме чуть позже ?
0
|
||
| 09.01.2020, 16:57 | |
|
Watchdog из Arduino Внешний WAtchdog AvrSudio и watchdog Analog Watchdog (AWD) Cortex m0 и watchdog таймер Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|