Hallo,
könnte mir jemand bei so einem Problem helfen:
ich muß nicht blockierende TClientSocket, TServerSocket - Komponente in einem Thread erstellen und verwalten.
Ich definiere socket-Komponente als private-Feld im Thread, erstelle Socket in der Prozedure Execute und definiere auch ensprechende Socket-Ereignisse (OnRead, OnConnect,..).
Die Frage ist, wie ich jetzt diese Ereignisse mit der Methode Execute verbinden kann? was soll ich in der Schleife
while not Terminated do
begin
....
end;
schreiben?
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55:
| TISServerThread = class(TThread) private { Private-Deklarationen } fLogStr: string; fLog: TISLog; fOwner: TComponent; fServerSocket: TServerSocket; procedure SocketAccept(Sender: TObject; Socket: TCustomWinSocket); procedure SocketRead(Sender: TObject; Socket: TCustomWinSocket); procedure SocketWrite(Sender: TObject; Socket: TCustomWinSocket); procedure SocketListen(Sender: TObject; Socket: TCustomWinSocket); procedure SocketError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); procedure SocketClientConnect(Sender: TObject; Socket: TCustomWinSocket); procedure SocketClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); procedure WrLog; protected procedure Execute; override; public constructor Create(Own: TComponent; Log: TISLog); end;
constructor TISServerThread.Create; begin fLog:=Log; fOwner:=Own;
FreeOnTerminate:=true; inherited Create(false);
fLogStr:='ServerThread Created'; Synchronize(WrLog); end;
procedure TISServerThread.Execute; begin
fServerSocket:=TServerSocket.Create(fOwner); fServerSocket.ServerType:=stNonBlocking; fServerSocket.OnAccept:=SocketAccept; fServerSocket.OnClientDisconnect:=SocketClientDisconnect; fServerSocket.OnClientConnect:=SocketClientConnect; fServerSocket.OnClientRead:=SocketRead; fServerSocket.OnListen:=SocketListen; fServerSocket.OnClientError:=SocketError; fServerSocket.Port:=PortNr; fServerSocket.Active:=true;
while not Terminated do begin //und was soll man hier schreiben???? end; end; |