Thread-Kommunikation mit Events
-
Hallo,
ich möchte das mein pThread dem Hauptprogramm ein "Event" mitteilt, auf das
das Hauptprogramm in seinem Kontext reagiert, ohne das das ständig Programm auf eine Cond-Variable o.ä. pollen muss. Gibt es da eine Entsprechung unter g++ für linux.Dachte an etwas wie Synchronisierte TNotifyEvents unter Delphi.
Danke und Gruß
LinuC
-
Nein
-
manni66 schrieb:
Nein
In Standard-C++ nicht, aber es gibt viele Bibliotheken dafür, denn Linux kann das. Zum Beispiel boost. Oder direkt die entsprechenden Linux-Systemfunktionen für Eventhandling. Wenn der Threadersteller Boost benutzen möchte (portabel, da auch für andere Betriebssysteme implementiert), dann lasse ich den Thread hier. Wenn er direkt die Systembibliothek benutzten möchte, dann möge er sich melden, dann verschiebe ich ins Linuxforum. So wirklich dafür spricht aber nichts, außer man möchte aus religiösen Gründen alles von Grundauf selber machen.
-
Hallo und Danke für die Antworten,
ich denke ích werde mit die Möglichkeiten der BOOST mal ansehen.
Gruß
LinuC
-
Stichwort für den Anfang wäre Boost::Signals2, dann musst du nicht lange suchen.
-
Mit Signals2 kannst du aber keinen Call über Threadgrenzen machen. Der Slot Callback wird im selben Thread ausgeführt der auch das signal abgesetzt hat. Sprich ein Signal aus dem Workerthread kann keine Aktion im Hauptthread auslösen.
Für Notifications gibt es zwei Möglichkeiten: Der Hauptthread hat sonst nichts mehr zu tun und muss auf das Ergebnis des Workers warten. Dann blockst du einfach den Hauptthread (condition_variable::wait() o.ä.). Falls der Hauptthread allerdings ansprechbar bleiben muss nimmst du stattdessen muss die Benachrichtigung non-blocking erfolgen. In diesem Fall ist condition_variable eine schlechte Wahl, hier würde schon ein einfaches atomic genügen das vom Hauptthread in regelmäßigen Abständen gecheckt wird.
Einde condition variable zu pollen ist aber in jedem Fall eine schlechte Idee. Entweder du pollst, dann nimmst du keine condition variable, oder du blockst.
-
Ich werfe mal Messagequeues ein ...
-
Ja, am besten die Systemeigene Messaqueue verwenden, hab in Windows im GUI-Thread auch immer einen Custom-Message-Handler, der std::function-Objekte ausführen kann, da kann man dann immer alle Arbeit hinschicken, die man so erledigt haben möchte.
Aber eingebaut gibt es das in Windows leider noch nicht.