我目前有一个使用手工演员的应用程序。我的计划是将它移植到 libcaf。
当前状态是:我有一个大的全局消息队列,我的系统(又名演员)订阅以获取他们的消息。他们用消息响应该全局队列。
整个系统是一个运行在Linux rt-preempt 内核上的实时应用程序。GUI 线程本身就是一个系统(演员),但它不在 RT 优先级上。
现在我的系统不需要知道他们的消息的接收者,因为接收者注册了他们想要的。
我的移植想法如下:我使用一个全局actor来代替我的全局消息队列,它处理消息的注册。这样,我可以获得一个简单的消息日志以用于调试目的,并且我不需要让所有参与者都知道所有可能的目标。
我有一个处理与现实世界的联系的 IO 系统(canbus)。
在我当前的系统中,我生成了 GUI 线程 + 系统。它等待 RT 初始化。生成 gui 线程后,我切换到 RT Preempt 优先级并创建其他系统,预先设置堆栈等等。一切都设置好后,我通知 gui RT 已启动。现在我的系统已初始化。
当一些致命的事情发生或系统需要关闭时,我发送一条消息,所有系统都关闭,所有线程都加入。
我的问题是:如何将 GUI 角色/线程与 libcaf 中的 RT 线程分开?您会建议在单独的过程中分叉 GUI 吗?我可以在不同的 RT 优先级线程上生成演员吗?
编辑:我找到了spawn
选项detached
。生成的演员(分离演员的孩子)是否在同一个线程上?