Sooo, nach einigen Querelen nun der nächste Versuch....
Ein kleiner Bug oben (was zum schmunzeln...): (T-GetTickCount<0) ist immer False...Das Ergebnis ist ein Cardinal und Cardinals sind immer positiv *g*
naja, nun siehts so aus:
Delphi-Quellcode:
procedure TConnectThread.Execute;
begin
Priority:=tpLower;
FConnected:=False;
try
FTCP.Connect(FHost,FPort);
FError:=nil;
except
on E:
Exception do FError:=E;
end;
if FError<>
nil then
raise FError
else
FConnected:=True;
Terminate;
end;
procedure TChatClient.Connect(Host:
String; Port: Integer);
var CT: TConnectThread;
T: Cardinal;
TT: TThread;
begin
try
CT:=TConnectThread.Create(True);
CT.TCP:=Fidtcp;
CT.Host:=Host;
CT.Port:=Port;
T:=GetTickCount+5000;
CT.Resume;
while (
not CT.Terminated)
do
begin
FOnSleep;
if (GetTickCount>T)
or (Fidtcp.Connected)
then Break;
Sleep(50);
end;
CT.Free;
except
raise EConnectException.Create('
');
end;
end;
Das Problem: Der Thread läuft weiter. und weiter. und weiter.
Irgendwie müsste der Thread vor dem CT.Free abgeschossen werden. denn CT.Free free't ja nicht den Thread selbst (so scheint es mir zumindest).
vor TerminateThread() schrecke ich (bisher) noch etwas zurück... Gibt es eine andere möglichkeit?