Выдача исключения из обработчика сигналов

ctrl-alt-up/down для копирования строки (или вниз). Сопровождаемый alt-up/down часто намного более быстр, чем вставка копии

22
задан EvilTeach 31 July 2017 в 00:36
поделиться

3 ответа

Сигналы полностью отличаются от исключений C ++. Вы не можете использовать блок C ++ try / catch для обработки сигнала. В частности, сигналы - это концепция POSIX, а не концепция языка C ++. Сигналы доставляются в ваше приложение ядром асинхронно, тогда как исключения C ++ - это синхронные события, определенные стандартом C ++.

Вы весьма ограничены в том, что вы можете переносить в обработчике сигналов POSIX. Обычная стратегия - иметь глобальный флаг типа sig_atomic_t , который будет установлен в 1 в обработчике сигналов, а затем, возможно, longjmp для соответствующего пути выполнения.

См. здесь для помощи в написании правильных обработчиков сигналов.

14
ответ дан 29 November 2019 в 04:54
поделиться

!! преобразует результат в YES или NO .

Использование !! x - это идиома из C. Результат этого выражения:

  • !! x == 0 when x == 0 // x равно нулю
  • !! x == 1 when x! = 0 // x не равно нулю

По крайней мере, в C вы можете использовать любое ненулевое выражение в качестве значения, которое удовлетворяет условию if () или другой условный поток управления. Однако иногда приятно знать, что «истинное значение» представлено как 1 , а не просто «ненулевым».

В Objective-C определено YES как 1 , а не как «ненулевое». Таким образом, в Objective-C эта идиома C.

Другими словами:

  • !! () . Этот поток может обрабатывать сигналы без ограничений, например, генерировать исключения или использовать другие механизмы связи.

6
ответ дан 29 November 2019 в 04:54
поделиться

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

Необходимо сделать важное замечание для всех регистров, используемых C ++ ABI, которые сохраняются и повторно используются механизмом обработки сигналов.

4
ответ дан 29 November 2019 в 04:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: