TServerSocket blockiert ganze Anwendung
-
Hallo,
ich habe eine einfache Anwendung, die einen TServerSocket
verwendet, um damit Daten von einem Client zu empfangen.In der ClientRead-Methode muss der Server warten, bis ein
Puffer freigegeben ist, das habe ich mit einer Semaphore
und WaitForSingleObject gemacht. Das Problem ist nun, dass die
ganze Anwendung lahmgelegt ist, sobald die ClientRead Methode
aufgerufen wird. Ich habe also keine Chance durch einen ButtonClick
die Semaphore wieder freizugeben (ReleaseSemaphore).Gibt es eine Möglichkeit, dem ServerSocket sozusagen einen eigenen
Thread zuzuweisen, damit nur der "Socket-Empfangs-Thread" blokiert
wird und nicht die ganze Anwendung?Danke und Gruss,
Stefan
-
Hallo
ja das kannst du machen, siehe zum Beispiel hier.
Allerdings könntest du das problem auch einfach durchApplication->ProcessMessages();lösen, das du in der Wartesachleife ab und zu ausführst. Dazu darf WaitFor... natürlich nicht unendlich lange warten, sondern muß einen Timeout von ein paar 100 Millisekuinden bekommen. Dann packst du WaitFor... und Aplication... in eine schleife, die solange läuft bis in irgendeiner Form das Warten beendet sein soll.
bis bald
akari
-
Danke für den Hinweis. Auf die Schleife mit Application->ProcessMessages() möchte ich eigentlich verzichten. Der Link mit den Threads erklärt
ja ganz gut, wie ich mit Threads im allgemeinen arbeite - aber wie
krieg ich nun den ServerSocket dazu, in einem eigenen Thread zu "laufen"?Das Zusammenspiel ist mir noch nicht so ganz klar... Wäre sehr dankebar
für eine kleines Beispiel oder weitere Infos zum Thema ServerSocket in
eigenem Thread!Gruss,
Stefan
-
lass einfach das ganze semaphore zeug raus. das gehört da nicht hin.