В настоящее время у меня есть приложение, в котором используются актеры ручной работы. Мой план состоит в том, чтобы портировать его на libcaf.
Текущее состояние таково: у меня есть одна большая глобальная очередь сообщений, в которой мои системы (так называемые акторы) подписываются на получение своих сообщений. Они отвечают сообщениями в эту глобальную очередь.
Вся система представляет собой приложение реального времени, работающее на ядре Linux rt-preempt. Поток GUI сам по себе является системой (актером), но не имеет приоритета RT.
Прямо сейчас моим системам не нужно знать получателей их сообщений, потому что получатели регистрируются на тех, кого они хотят.
Моя идея переноса такова: я использую одного глобального актера в качестве замены моей глобальной очереди сообщений, и он обрабатывает регистрацию сообщений. Таким образом, я могу получить простой журнал сообщений для целей отладки, и мне не нужно, чтобы все участники знали все возможные цели.
У меня есть система ввода-вывода (canbus), которая обрабатывает контакт с реальным миром.
В моей текущей системе я создаю поток GUI + system. Он ожидает инициализации RT. После того, как поток графического интерфейса создан, я переключаюсь на приоритет RT Preempt и создаю другие системы, prefault стек и так далее. Когда все настроено, я уведомляю графический интерфейс о том, что RT работает. Теперь моя система инициализирована.
Когда происходят какие-то фатальные события или система должна быть отключена, я отправляю сообщение, и все системы отключаются, и все потоки объединяются.
Мои вопросы: как я могу отделить актора/поток GUI от потока RT в libcaf? Вы бы порекомендовали разветвить графический интерфейс в отдельном процессе? Могу ли я создавать актеров в потоках с другим приоритетом RT?
РЕДАКТИРОВАТЬ: я нахожу вариант spawn
detached
. Находятся ли порожденные актеры (потомки отдельного актера) в одном потоке?