Мне трудно определить, как завершить работу системы акторов CAF, когда приложение получает сигнал SIGINT (^C). Я знаю о csignal, но он принимает функцию (не функцию класса и не лямбду), поэтому я не могу получить переменную act_system в области действия, чтобы отправить сообщение моим актерам.
C++ Actor Framework обрабатывает SIGINT
Ответы (1)
@parktomatomi уже упоминал этот пример в качестве ссылки: https://github.com/actor-framework/actor-framework/blob/5ead6f95182e1e2fee683de59579ef35f58588da/examples/curl/curl_fuse.cpp
Чтобы добавить немного больше контекста: причина, по которой пример опрашивает атомарное значение в цикле, связана с ограничениями, которые стандарты C и C++ налагают на обработчики сигналов. Здесь очень мало вещей, которые вы можете безопасно делать. В частности, выделение памяти небезопасно. Следовательно, мы не могли отправлять CAF-сообщения, даже если бы у нас был безопасный способ передать систему акторов обработчику сигналов. Установка флагов с помощью атомарных операций — одна из немногих безопасных вещей, которые можно сделать, но это означает, что вам нужно опросить этот флаг в другом потоке, чтобы вызвать какое-то полезное действие.
caf_main
каждую секунду или около того (в промежутках между ними). - person parktomatomi   schedule 25.09.2020