Основная обработка сигналов в C ++
==================================

Это довольно простой сценарий, но я не нахожу слишком много полезных ресурсов. У меня есть программа C ++, работающая в Linux, которая выполняет обработку файлов. Читает строки, выполняет различные преобразования, записывает данные в базу данных. Есть определенные переменные (хранящиеся в базе данных), которые влияют на обработку, которую я в настоящее время читаю на каждой итерации, потому что я хочу, чтобы обработка была как можно более актуальной, но небольшая задержка - это нормально. Но эти переменные меняются довольно редко, и чтения со временем обходятся дорого (10 миллионов плюс строки в день). Я мог бы разнести чтения каждомуn итерации или просто перезапустите программу, когда переменная меняется, но они кажутся хакерскими.

Вместо этого я хотел бы, чтобы программа вызывала перечитывание переменных при получении SIGHUP. Все, что я читаю об обработке сигналов, говорит о библиотеке сигналов C, которую я не знаю, как связать с классами моей программы. Библиотеки сигналов Boost, похоже, больше связаны с межобъектной связью, чем с обработкой сигналов ОС.

Кто-нибудь может помочь? Кажется, что это должно быть невероятно просто, но я довольно заржавел с C ++.

 как вы могли бы справиться с этим в C. Я думаю, что вполне нормально иметь отдельную функцию-обработчик сигналов, поскольку вы будете просто публиковать в семафор или устанавливать переменную или что-то подобное, что другой поток или Объект может проверить, чтобы определить, нужно ли ему перечитать настройки.

Вы можете проверить отправку`SIGHUP` используя`kill -1 `pidof yourapp``.



 не обязательно было бы излишним реализовывать их все:

Отвечать на определенный сигнал, так же, как это делает С. C ++ работает так же. Смотрите документацию для[`signal()`](https://linux.die.net/man/2/signal).Запуск по метке времени изменения какого-либо файла, например, базы данных, если она хранится в плоском файле.Триггер один раз в час или один раз в день (что имеет смысл).

 соответствующий сигналу OS, и привязать сигнал Boost к вашему слоту, чтобы вызвать соответствующий обработчик.



[эта ссылка](http://www.cplusplus.com/reference/clibrary/csignal/signal/) который дает подробную информацию о регистрации сигнала.

Если я не ошибаюсь, важно помнить, что любая функция внутри объекта ожидает параметр-референт, что означает, что нестатические функции-члены не могут быть обработчиками сигналов. Я считаю, что вам нужно зарегистрировать его либо в статической функции-члене, либо в какой-то глобальной функции. Оттуда, если у вас есть конкретная объектная функция, о которой вы хотите позаботиться о своем обновлении, вам потребуется способ ссылки на этот объект.