Hallöchen! Ich versuche in Delphi ein Chat-Programm zu realisieren und arbeite mit den alten ClientSocket und ServerSocket Komponenten. Im Moment hänge ich bei folgendem Problem:
Meine Klasse TPinger leitet sich von TThread ab, ich versuche zu jeder vollen Sekunde alle am Chat beteiligten Personen zu pingen. Die PING() Methode im Code unten macht lediglich folgendes:
Socket.SendText('PING!');
Delphi-Quellcode:
procedure TPinger.Execute;
begin
while not Terminated or (benutzer <> nil) or (benutzer.getSocket <> nil) do
begin
benutzer.PING();
Sleep(1000);
end;
end;
So weit so gut. Das Programm startet und läuft auch ohne Probleme, die Pings kommen zügig an und alles scheint bestens. Beim Disconnecten des Clients jedoch, crasht das Programm vollständig. Fehlermeldung gibt es keine direkt. Läuft die Anwendung außerhalb der Entwicklungsumgebung, so crasht sie einfach ("Projekt1.exe funktioniert nicht mehr und muss beendet werden."). Lasse ich das Projekt innerhalb der Entwicklungsumgebung zum Fehler kommen, poppt der Debugger auf und zeigt mir irgendeinen Assembler-Code oder so.
Mein Verdacht liegt darin, dass der Thread trotz Anweisung bei fehlendem "Benutzerobjekt" oder dem fehlenden Socket des Benutzerobjekts abzubrechen einfach nicht abbricht sondern ins leere tritt und stirbt. Jemand ne idee wie ich das Problem lösen könnte?
Mfg
Balthasar