Hallo,
ich habe unter Kylix ein Konsolenprogramm geschrieben, das einen idTCPServer benutzt. Im Ereignis onExecute wird eine Prozedur aufgerufen, die eine Stringlist benutzt.
Da Stringlists ja nicht Threadsicher sind verwende ich eine CriticalSection. Trotzdem trennt der Server
die Verbindung zum Client, wenn ich die Stringlist per var Parameter an eine andere Prozedur übergebe.
Sprich: Es wird die Methode OnDisconnect aufgerufen, und der Client ist nicht mehr verbunden.
Vielleicht noch was zur CriticalSection:
Ich habe die
Unit SyncObjs eingebunden und eine eine Variable CS vom Typ TCriticalSection deklariert. Was mach ich falsch?
Der Programmaufbau sieht in etwas so aus:
Delphi-Quellcode:
uses
SyncObjs;
procedure sl1;
SL: TStringlist;
begin
SL := TStringlist.Create;
try
sl2(SL);
finally
freeandnil(Slist);
end;
end;
procedure sl2(var SList: TStringlist);
begin
Slist.Clear;
Slist.Add('456');
end;
procedure TServEvent.OnExecute(AThread: TIdPeerThread);
var msg: string;
begin
msg := AThread.Connection.Readln
if msg ='123'
then begin
CS.Enter;
sl1(msg);
CS.Leave;
end;
end;
var
Cs: TCriticalSection
begin
CS := TCriticalSection.Create;
TCPServer.active := true;
readln;
readln;
CS.free;
end.
Ich hoffe ihr könnt mir helfen
Gruß
Christian