У меня есть программа на основе Xlib с циклом событий, которая использует XNextEvent
для получения и обработки соответствующих событий.Закрыть приложение XLib от другого процесса
Я хотел бы иметь возможность изящно закрыть эту программу из другого процесса (фактически из сценария оболочки). Мне нужно выполнить некоторую очистку при закрытии, поэтому я решил настроить обработчик сигнала (например, для SIGUSR1), и когда этот сигнал будет получен, выполните соответствующую очистку.
Мой вопрос в том, как я могу прерывать вызов (блокирование) XNextEvent
от обработчика сигнала?
Любые другие предложения?
Я не уверен, я понимаю ваш вопрос. Сигналы уже прерывают нормальный поток программы. Системный вызов внутри 'XNextEvent()' будет прерван для запуска вашего обработчика. Вам нечего делать, чтобы достичь этого. –
Я предполагаю, что 'XNextEvent()' будет прерван для запуска моего обработчика, но как только обработчик будет запущен, выполнение возобновится, и 'XNextEvent()' все равно будет заблокирован. Вопрос заключается в том, как (безопасно) разблокировать 'XNextEvent()' из обработчика сигнала. – Grodriguez
Я вижу. Я предполагаю, что вы не хотите 'exit()' из обработчика сигнала. Я не думаю, что 'XCloseDisplay()' безопасно вызывать из обработчика сигналов. Возможно, задание глобального логического значения и впрыскивание события, поэтому 'XNextEvent()' возвращает сразу же вариант. Я осмотрюсь. –