Ich habe derzeit eine Anwendung, die handgefertigte Schauspieler verwendet. Mein Plan ist, es in libcaf zu portieren.Port Handwerk Systeme zu Libcaf
Der aktuelle Status ist: Ich habe eine große globale Nachrichtenwarteschlange, wo meine Systeme (aka Akteure) abonnieren, um ihre Nachrichten zu erhalten. Sie antworten mit Nachrichten an diese globale Warteschlange.
Das ganze System ist eine Echtzeitanwendung, die auf Linux rt-Preempt Kernel läuft. Der GUI-Thread ist selbst ein System (Akteur), hat jedoch keine RT-Priorität.
Im Moment müssen meine Systeme die Empfänger ihrer Nachrichten nicht kennen, weil die Empfänger sich für ihre gesuchten registrieren.
Meine Portierung Idee ist wie folgt: Ich verwende einen globalen Akteur als Ersatz für meine globale Nachrichtenwarteschlange und es behandelt die Registrierung für die Nachrichten. Auf diese Weise kann ich ein einfaches Protokoll der Nachrichten für den Debugging-Zweck erhalten, und ich muss nicht alle Akteure alle möglichen Ziele wissen lassen.
Ich habe ein IO-System (Canbus), das den Kontakt zur realen Welt handhabt.
In meinem aktuellen System spawne ich das GUI-Thread + System. Es wartet auf die Initialisierung von RT. Nachdem der GUI-Thread erzeugt wurde, wechsle ich auf RT Preempt Priority und erstelle die anderen Systeme, vergesse den Stack und so weiter. Wenn alles eingerichtet ist, benachrichtige ich die GUI, dass RT aktiv ist. Jetzt ist mein System initialisiert.
Wenn einige fatale Dinge passieren oder das System herunterfahren muss, sende ich eine Nachricht und alle Systeme heruntergefahren und alle Threads werden verbunden.
Meine Fragen sind: Wie kann ich die GUI Akteur/Thread aus dem RT-Thread in libcaf trennen? Würden Sie empfehlen, die GUI in einem separaten Prozess zu verzweigen? Kann ich Schauspieler auf verschiedenen RT Priority Threads spawnen?
EDIT: Ich finde die spawn
Option detached
. Sind die gespawnten Schauspieler (Kinder eines abgespaltenen Schauspielers) auf demselben Faden?
Vielen Dank für Ihre ausführliche Antwort! Ich werde ein Konzept schreiben. Über die Thread-Attribute: Es ist meistens nur 'sched_setscheduler' und' mlockall', die einmal im RT-Thread aufgerufen werden müssen. Also ich denke nichts besonderes zu libcaf hinzuzufügen. –