Как бороться с SIGINT? - PullRequest
       8

Как бороться с SIGINT?

0 голосов
/ 27 января 2011

Когда я ловлю сигнал SIGINT в своей программе, как я могу безопасно очистить ресурсы? В функции обработчика сигналов невозможно вызвать оператор delete, потому что я не знаю, как освободить ресурс, созданный с помощью оператора new.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 27 января 2011

Как правило, вы вообще не хотите ничего делать в вашем обработчике сигналов, кроме как установить логический флаг, на который будет реагировать какая-либо другая часть вашей программы, обычно вызывая падение некоторых циклов и позволяя знакомому подходу упорядоченное отключение, которое вы бы использовали в случаях, не связанных с сигналами. Причина использования этого флага для координации выключения заключается в том, что некоторые библиотечные функции избегают компромиссов, необходимых для безопасного повторного ввода во время обработки асинхронных сигналов. Даже некоторые поточно-ориентированные функции, использующие специфичную для потока память, могут не справиться с асинхронным повторным входом. Быстрый поиск нашел обсуждение безопасных функций на http://book.chinaunix.net/special/ebook/addisonWesley/APUE2/0201433079/ch10lev1sec6.html#ch10lev1sec6.

1 голос
/ 27 января 2011

Если ваше приложение закрывается, не беспокойтесь о памяти.ОС все равно выбросит все, как только вы прекратите работу.

То, что вам нужно очистить в обработчике сигналов, - это то, что иначе переживет ваш процесс - например, если дочерний процесс у вас 'Если вы создали, нужно также выйти, вы должны сказать это сделать.

...