Ich habe ein Problem mit der Synchronisation bei meinen Threads.
Ich habe ein Socket (TIdTCPClient) und dazu einen Thread, welcher ReadLn aufruft:
Delphi-Quellcode:
procedure TMyThread.Execute();
var
Msg: String;
begin
while Connection[SockId].Connected = true do begin
Msg := Connection[SockId].ReadLn;
WriteLn(Msg);
end;
end;
Nun habe ich beim Beenden das Problem, dass ich bei dieser Zeile:
WriteLn(Msg);
Einen Fehler bekomme, weil Connection[SockId] nicht 'connected' ist.
Lösen wollte ich das Problem so, dass ich beim Beenden folgendes Aufrufe:
Delphi-Quellcode:
//erst die Threads beenden, damit keine Fehler auftreten
for i := 0 to High(Connection) do begin
Connection[i].Thread.Terminate;
end;
und ein Stück code weiter:
Delphi-Quellcode:
for i := 0 to High(Connection) do begin
Connection[i].Disconnect;
Connection[i].Free;
end;
Allerdings bekomme ich denselben Fehler \:
Wer weiß Rat? (: