so_4: Версия 4.4.0. Обработка сигналов SIGINT, SIGTERM, SIGHUP и SIGPIPE

До версии 4.4.0-beta6 SObjectizer никак не реагировал на сигналы SIGINT, SIGTERM, SIGHUP и SIGPIPE. Например, если пользователь прерывал работу какого-либо тестового консольного приложения SObjectizer через Ctrl+C, то использовались штатные обработчики сигнала SIGINT, которые аварийно завершали работу приложения. В версии 4.4.0-beta6 подобное завершение не всегда останавливало работу приложения: например, под Windows в приложении оставались работоспособными нити реакторов и таймеров и приложение не завершалось.

Для преодоления этой ситуации в SObjectizer 4.4.0-beta6 при старте SObjectizer Run-Time запускается отдельная нить (называемая signal_thread), которая:

Т.е. по умолчанию SObjectizer 4.4.0-beta6 выполняет самую простую обработку сигналов SIGINT и пр. Если приложение это не устраивает, то приложение должно реализовать свою обработку сигналов и запретить SObjectizer-у запуск signal_thread.

Если приложение использует какую-либо свою схему обработки сигналов (например, предоставляемую GUI библиотекой), то приложение должно запретить SObjectizer-у запуск signal_thread.

Запрещение запуска signal_thread выполняется с помощью API-функции so_4::api::sobjectizer_settings():

so_4::api::sobjectizer_settings().signal_thread().disable();
so_4::api::start( ... );

Внимание:
Вызов so_4::api::sobjectizer_settings() нужно выполнять перед стартом SObjectizer Run-Time. Все изменения в настройках SObjectizer, сделанные уже во время работы SObjectizer Run-Time будут учтены только при следующем обращении к so_4::api::start().

Документация по SObjectizer v.4.4 'Тебуломста'. Последние изменения: Thu Sep 18 10:26:48 2008. Создано системой  doxygen1.5.6 Intervale SourceForge.net Logo