Probleme mit Thread-Kommunikation (speziell)

Hallo!
Ich habe einen sehr speziellen Fall bei dem ich etwas ins Schleudern komme. Ich programmiere grade für ein externes Programm ein plugin, welches als Dll geladen wird. Mein Plugin ist letztendlich nichts weiter als ein Socket-Server, der genau eine Verbindung annehmen und mit dieser kommunizieren muß.
Das externe Programm (ein physikalischer Simulator) wird über eine Skriptsprache gesteuert, durch die auch die dll geladen wird. Das Plugin wiederum kann Funktionen der umgebenden Skriptdatei (auch eigen definierte) aufrufen. Es soll nun funktionieren, dass ein Programm eine Verbindung zu meinem server-Plugin aufnimmt, ihm eine Nachrichte sendet und unbestimmte Zeit später von der Skriptsprache (also meinem Skriptsprachenprogramm) eine Antwort gesendet wird. In etwas so:

Simulator: Skript -\> lade und starte Server.dll
 Skript -\> Server.dll -\> baue connection auf
 Skript -\> Server.dll -\> warte auf Nachricht
 ...
 Skript -\> Server.dll -\> sende Antwort

Leider sorgt jder blockierende Aufruf des Servers dafür, dass die GUI des Simulators komplett aussetzt, sie läuft anscheinend nicht in einem eigenen Thread. Also habe ich den Server in einem eigenen Thread gestartet über _beginthread(…). Das hat natürlich den Nachteil, dass ich von der Skriptsprache keine synchronen Aufrufe mehr an den server machen kann, da ich z.B. ein read() aufrufen kann, bevor überhaupt jemand verbunden ist.

Wie kann ich dieses Problem meistern?

Grundsätzlich kein Problem, wäre es nicht so, dass d Simulatorprogramm

Hallo,

um auf Threads verzichten zu können kannst du auch „select()“ bzw. „WSAAsyncSelect()“ verwenden. Beide Funktionen machen eigentlich genau das selbe (wobei WSA… nur mit nem Fenster funktioniert). Du übergibst den Deskriptor - also deinen Socket -, von dem gelesen bzw. geschrieben werden soll und gibst ein Timeout vor, die Funktion sagt dir dann, auf welchem Socket was zum lesen da ist, dann kannst du dein „read()“ machen und blockierst nichts, da du ja nicht bis in die unendlichkeit auf neue Daten warten musst.

Hoffe es hilft, kann glaube ich nicht so toll erklären :wink:

Mfg,
Christoph