C++ Threadkommunikation

T

Tigerass 2.0

Gast
Hallo Leute,

Folgendes Szenario:
Ich habe ein Programm, welches einen Thread startet. In diesem Wird eine log-datei geschrieben. Manchmal benötige ich aber auch in meinem Programm zugriff auf diese Datei, was nicht geht, da sie im Thread geöffnet ist. Wie mache ich das nun am besten, dem Thread sozusagen eine Nachricht zu schicken den log mal kurz zu schließen?

LG Tigerass
 
Wieso oeffnest du die log datei nicht einfach nur zum schreiben und schliesst sie sofort wieder?
 
Ich würd dich da an http://stackoverflow.com/ weiterverweisen, da gibts einige ansätze / lösungen für threadsafe logging.

Die Datei immer zu öffen / schließen ist besonders mit Threads keine gute Idee da Datei-Writes nicht threadsafe sind.
 
Julexander schrieb:
Wieso oeffnest du die log datei nicht einfach nur zum schreiben und schliesst sie sofort wieder?

Der Abschnitt muss aber auch synchronisiert sein. Wenn du für Windows programmierst, guck dir mal CRITICAL_SECTION an.
 
Über Nebenläufigkeit kannst du ganze Vorlesungen halten. Ein guter Einstieg wäre, erstmal den Wikipedia Eintrag über Semaphore zu lesen.

Grob gesagt musst du den Zugriff auf die Datei über einen kritischen Abschnitt regeln, so dass zu jeder Zeit nur ein Thread exklusiven Zugriff besitzen kann.
 
Über die Interlocked Funktionen sollte das doch auch gehen, oder? Eigendlich müssen die Threads ja nur einen boolwert austauschen/Senden.
 
Ich weiß ja nicht wie dein Code genau aufgebaut ist, aber wenns nur ein boolean ist den du dem Logging Thread übergeben musst, dann ist die Interlocked Klasse tatsächlich ne gute Möglichkeit. (Vor allem Interlocked.Exchange())
 
Zurück
Oben