我目前有一个应用程序使用手工制作的演员。我的计划是将其移植到libcaf。端口手工制作系统libcaf
目前的状态是: 我有一个很大的全局消息队列在我的系统(又名演员)订阅得到他们的消息。他们用消息来回应该全局队列。
整个系统是一个运行在Linux rt-preempt内核上的实时应用程序。 GUI线程本身就是一个系统(actor),但它不在RT优先级上。
现在我的系统不需要知道他们的消息的接收者,因为接收者注册他们想要的。
我的移植想法如下:我使用一个全局actor来替换我的全局消息队列,并处理消息的注册。这样,我可以轻松记录消息以进行调试,并且我不需要让所有演员知道所有可能的目标。
我有一个处理联系到现实世界的IO系统(canbus)。
在我目前的系统中,我产生了GUI线程+系统。它等待RT初始化。在gui线程产生后,我切换到RT抢占优先级并创建其他系统,缺省堆栈等等。当所有的东西都安装完成后,我通知gui RT已启动。现在我的系统被启动。
当一些致命的事情发生或系统需要关闭时,我发送消息,所有系统关闭,所有线程都加入。
我的问题是: 我怎样才能从libcaf中的RT线程分离GUI角色/线程? 你会推荐在单独的过程中分离GUI吗? 我可以在不同的RT优先级线程上产生actor吗?
编辑:我找到spawn
选项detached
。产生的演员(独立演员的小孩)是否在同一个线程上?
谢谢你精心设计的答案!我要写一个概念证明。关于线程属性:它大多只是'sched_setscheduler'和'mlockall',需要在RT线程上调用一次。所以我想没有什么特别添加到libcaf。 –