Konsole thread-safe machen

Design Patterns, Erklärungen zu Algorithmen, Optimierung, Softwarearchitektur
Forumsregeln
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
Antworten
BlueShark
Beiträge: 79
Registriert: 28.02.2009, 18:55
Alter Benutzername: BlueShark

Konsole thread-safe machen

Beitrag von BlueShark »

Moin moin,
ich programmiere momentan an einer Konsole, die ich für meine Projekte verwenden will. Diese will ich nun thread-safe machen und bräuchte dabei Hilfe.

Ich habe die Konsole so geschrieben, dass es möglich ist die Ausgabe in eine Datei, ein Fenster oder sonst irgendwas zu schreiben. Im Endeffekt bekommt man einfach einen Verweis auf den Schreibpuffer der Konsole. Nun will ich jedoch in der Lage sein, dass man von überall in die Konsole schreiben soll. Also hab ich eine Basisklasse geschrieben, von der es nur eine Instanz geben darf. Nun gibt es eine "ConsoleObject" Klasse, der man einen Zeiger auf die Basisklasse übergibt. Danach schiebt man einfach munter Daten in dieses "ConsoleObject".

Intern läuft dabei folgendes ab : Das Objekt vom Typ "ConsoleObject" holt sich bei der Basisklasse einen Puffer, in den geschrieben wird. Ist dieser voll wird der Basisklasse gesagt, dass der Puffer voll ist und ein neuer leerer Puffer wird zurückgegeben.

Nun bin ich mir jedoch nicht sicher, wie ich das vernünftig umsetzten kann. Soll ich der Basisklasse nen Mutex verpassen und die einzelnen "ConsoleObject"-Objekte jedes Mal in einer Endlosschleife probieren lassen den Mutex zu locken? Oder gibt es eine bessere Möglichkeit wie ich diese Konsole umsetzen kann.

Mfg
BS
Benutzeravatar
Lord Delvin
Establishment
Beiträge: 577
Registriert: 05.07.2003, 11:17

Re: Konsole thread-safe machen

Beitrag von Lord Delvin »

Du könntest auch einfach MessageQueues aufmachen mit denen du dan Nachrichten an die Konsole schickst und die Konsole holt sich die Nachrichten und schreibt sie dann selbständig irgendwohin. Dann müsstest du die Konsole in einem neuen Thread laufen lassen, aber mehr threads ist ja ne ganze weile eher nützlich.

Ansonsten würde ich ein Lock um den Schreibpuffer der Konsole machen.
Gruß
XML/JSON/EMF in schnell: OGSS
Keine Lust mehr auf C++? Versuche Tyr: Get & Get started
BlueShark
Beiträge: 79
Registriert: 28.02.2009, 18:55
Alter Benutzername: BlueShark

Re: Konsole thread-safe machen

Beitrag von BlueShark »

Klingt vernünftig. Gibt es da ein paar hilfreiche Funktionen von ner API oder muss ich das ganze selbst zusammenbasteln? Oder anders gesagt, sollte ich so etwas mit wxWidgets coden oder mich besser auf ein OS beschränken? Immerhin will ich nicht, dass die Konsole zu viel Performance frisst.

Mfg
BS
Benutzeravatar
Biolunar
Establishment
Beiträge: 154
Registriert: 27.06.2005, 17:42
Alter Benutzername: dLoB

Re: Konsole thread-safe machen

Beitrag von Biolunar »

Was für Funktionen brauchst du denn? Eine Messagequeue ließe sich z.B. einfach mit std::queue implementieren.
Jörg
Establishment
Beiträge: 296
Registriert: 03.12.2005, 13:06
Wohnort: Trondheim
Kontaktdaten:

Re: Konsole thread-safe machen

Beitrag von Jörg »

Wenn Du dich auf Windows beschraenkst, dann schau dir mal PostThreadMessage und GetMessage an. Mehr brauchst Du dann nicht. std::queue ist nicht thread-safe, dass muesstest du dann aussenrum basteln.
BlueShark
Beiträge: 79
Registriert: 28.02.2009, 18:55
Alter Benutzername: BlueShark

Re: Konsole thread-safe machen

Beitrag von BlueShark »

OK, ich weiß nun, wie ich meine Konsole umsetzen werde. Ich benutze übrigens "pthreads", die gefallen mir irgendwie besser als das WinAPI-Zeugs, keine Ahnung warum eigentlich. Nun bin ich jedoch echt am grübeln, ob ich meine Konsole in einem extra Prozess oder in einem Thread auslagern soll? Vielleicht hat ja jemand nen Hinweis oder nee kleine Hilfestellung diesbezüglich? Wenn ich das in einem Thread auslagern würde, werde ich um das Objekt meiner Basisklasse einfach nen Mutex legen. Sollte ich das aber in einem extra Prozess auslagern, würde ich nen MessageQueue verwenden.

Mfg
Harry
Benutzeravatar
kimmi
Moderator
Beiträge: 1405
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: Konsole thread-safe machen

Beitrag von kimmi »

Du könntest für so etwas auch auf ACE-Library zurückgreifen. Die bieten entsprechende Hilfsmittel an und du mußt dich nicht um die jeweilige API kümmern. Gerade für solche Zwecke habe ich ganz gute Erfahrungen mit ACE machen können. Damit kannst du deine Console dann auch prozessübergreifend absichern, wenn du das willst bzw. mußt.

Gruß Kimmi
Antworten