2012-03-28 4 views
1

Ich entwickle eine Instant-Messaging-Anwendung.pthread anders als warten und signalisieren

Dies ist die Situation, die ich Hilfe brauche: Eine Routine in meinem Code fgets() die Nachricht, die der Benutzer eingegeben hat. Jetzt muss ich einen Thread aufwecken, der eine Routine hat, um die Nachricht an den Sockel usw. zu senden. Ich bin nicht wirklich sicher, wie das geht.

Wenn ich einen Mutex verwende: Ich möchte nicht, dass mein erster Thread jemals wartet. Daher möchte ich das nicht verwenden. Ähnlich kann ich cond_variable nicht verwenden.

Bitte sagen Sie mir, wie Sie das bekommen.

+2

Denken Sie nicht darüber nach. Die Zeit, die Ihre zwei Threads verbringen werden (a) warten auf Benutzereingaben und (b) übertragen über das Netzwerk sind EONS verglichen mit dem, was Sie sich vorstellen, dass ein Mutex/Condvar kostet. – Duck

+1

Warum können Sie keine Zustandsvariable verwenden? Bedingungsvariablen sind * entworfen * um einen Thread aufzuwecken, wann auch immer ein Ereignis auftritt, so dass sie hier ziemlich nützlich sein können. –

Antwort

0

Entenpunkt über nicht überdenken es ist ein gutes.

Ein anderer Weg, den Sie gehen könnten, ist eine Pfeife zu verwenden. Ihr Konsolenhandling-Thread schreibt eine Nachricht in die Pipe, und der Netzwerk-Thread führt eine blockierende Nachricht von der Pipe aus.

Was Sie möglicherweise tun, ist der Netzwerk-Thread, der eine select() auf der Konsolen-Pipe und dem Netzwerk-Socket ausführt. Dann würde es aufwachen und Dinge tun, wenn es entweder etwas zu senden oder etwas aus dem Netzwerk zu empfangen hatte. Snazzy!