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 durch

    Application->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.


Anmelden zum Antworten