Hello dz, Change this. Its from top of my head so can be syntax errors. You have to move the destroy of the server also in the Execute mehod:
Destructor TServerThrd.Destroy; Begin Try // this must in the Execute method // If Assigned(FSocketSrv) Then Begin // FSocketSrv.Free; // <<-- HERE! (waits forever) // End; Finally Inherited Destroy; End; End; Procedure TServerThrd.Execute; Begin Try FSocketSrv := TWSocketThrdServer.Create(Nil); FSocketSrv.Listen(); FSocketSrv.MessageLoop; Finally // Add FSocketSrv.Free; End; End; --- Rgds, Wilfried [TeamICS] http://www.overbyte.be/eng/overbyte/teamics.html http://www.mestdagh.biz Thursday, October 4, 2007, 18:57, [EMAIL PROTECTED] wrote: > Hello: > I'm having a problem with the TWSocketThrdServer. > My application has a worker thread that contains a > TWSocketThrdServer member to handle all incoming > requests. When the main thread finishes, it sends a > WM_QUIT message to the worker thread, which then > finishes and frees the TWSocketThrdServer. However, > if there are clients connected, the thrdserver stalls > in its destructor, while waiting for all its threads > to finish. > It only loops forever when there are clients > connected and the worker thread is terminated. But > if there are no clients connected, it works fine. > Can someone offer any help? Most likely I'm doing > something wrong. (Below is an example of my code.) > Also, I need to be able to terminate the entire > application if something goes wrong while processing > clients. What is the best way to do this? Should I > post a message to the main thread from a > TWSocketThrdServer event in the worker thread? > Thanks! > dZ. > My code is somewhat like this (this is very much > simplified): > Interface > Type > TServerThrd = Class(TThread) > Private > FSocketSrv: TWSocketThrdServer; > Public > Constructor Create; Reintroduce; > Destructor Destroy; Override; > Procedure Execute; Override; > End; > TQApp = Class(TObject) > Private > FServerThrd : TServerThrd; > Public > Constructor Create; > Destructor Destroy; Override; > End; > Implementation > { TQApp } > Constructor TQApp.Create; > Begin > FServerThrd := TServerThrd.Create(False); > End; > Destructor TQApp.Destroy > Begin > Try > Try > PostThreadMessage(FServerThrd.ThreadID,WM_QUIT,0,0); > Finally > FServerThrd.WaitFor; > FServerThrd.Free; > End; > Finally > Inherited Destroy; > End; > End; > { TServerThrd } > Constructor TServerThrd.Create; > Begin > Inherited Create(True); > End; > Destructor TServerThrd.Destroy; > Begin > Try > If Assigned(FSocketSrv) Then Begin > FSocketSrv.Free; // <<-- HERE! (waits forever) > End; > Finally > Inherited Destroy; > End; > End; > Procedure TServerThrd.Execute; > Begin > Try > FSocketSrv := TWSocketThrdServer.Create(Nil); > FSocketSrv.Listen(); > FSocketSrv.MessageLoop; > Finally > // do other cleanup > End; > End; -- To unsubscribe or change your settings for TWSocket mailing list please goto http://www.elists.org/mailman/listinfo/twsocket Visit our website at http://www.overbyte.be