У меня есть программа, которая использует сигнал (SIGUSR2) для настройки функции обработчика catch для обработки сообщений с высоким приоритетом.C Использование и процесс использования сигналов с помощью очередей сообщений IPC
Программа принимает входящие сообщения из очереди сообщений IPC, используя msgrcv() в своем основном цикле. Когда отправитель сообщений в очередь сообщений IPC хочет уведомить программу о том, что высокий приоритет является входящим, он отправляет SIGUSR2 в процесс, чтобы он прекратил обработку любого текущего сообщения, которое может быть обработано.
В функции обработчика сигнала улова я сначала при входе сделать:
сигнал (SIGUSR2, SIG_IGN);
игнорировать любые новые сигналы для предотвращения.
затем код обрабатывает запрос, где преимущественное хранит в настоящее время обрабатывается сообщение обратно в очередь, ведение домашнего хозяйства и т.д., а затем непосредственно перед возвращением из функции обработчика сигнала делает:
сигнала (SIGUSR2, sighandler_func);
Вопрос: Если еще один сигнал обработки вспышки получен только через наносекунду после , выдается вышеупомянутый сигнал, будет ли процесс повторно отправлен на функцию обработки сигнала ? т.е.: если код в основном цикле, где , сигнал sighold (SIGUSR2) и sigrelse (SIGUSR2) останавливает/запускает прием сигнала преимущественного использования, или это только выше сигнала, который активирует обработчик сигнала?
My [Magic 8 Ball] (https://en.wikipedia.org/wiki/Magic_8-Ball) говорит: «Ответьте, попробуйте снова». Пожалуйста, напишите [минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) - желательно с фактическим кодом. –
Кажется намного проще и бесполезно просто использовать вторую очередь для высокоприоритетных сообщений. –
согласился, но я ограничен клиентом в рамках изменений, которые я могу сделать. – user3053087