Danke für die Infos!
Ich habe hier jetzt leider ein großes Problem: Mein Socket im Thread will sich nicht verbinden, aber ein TClientSocket, der als Komponente auf meinem Formular liegt und exakt dieselben Settings hat kann dies ohne Probleme. Hier mal mein Thread:
Delphi-Quellcode:
constructor TSocketProbeThread.Create(aSocket: TClientSocket; aPauseTime: Integer);
begin
inherited Create(false);
FIP := aSocket.Host;
FPort := aSocket.Port;
FPauseTime := aPauseTime;
FCS := TCriticalSection.Create;
end;
procedure TSocketProbeThread.Execute;
begin
inherited;
repeat
FCS.Enter;
try
if not Assigned(FSocket) then
begin
FSocket := TClientSocket.Create(nil);
FSocket.OnError := SocketError;
FSocket.Host := FIP;
FSocket.Port := FPort;
FSocket.ClientType := ctNonBlocking;
end;
if (not FSocket.Active) then
begin
try
FSocket.Active := true;
except;
Sleep(100);
end;
end;
finally
FCS.Leave;
end;
Sleep(FPauseTime);
until Terminated;
end;
(Das Sleep(100) im except-Zweig ist nur für mich zum Haltepunkt setzen.)
Das Programm läuft ohne jeden Fehler zu generieren "FSocket.Active := true;" durch, aber .Active ist danach weiterhin false. Es wird weder der Except-Zweig betreten, noch wird OnError ausgelöst, und der Thread wird auch nicht weggeschossen. Er läuft brav weiter und versucht im gesetzten Intervall (10s im Moment) Active zu setzen, aber es bleibt einfach immer false. Ohne Fehler ohne alles.
Nehme ich den Socket, den ich im Create als Datenspender übergebe, welcher auf meinem Formular liegt, verbindet dieser sich sofort und ohne Probleme. Was mache ich hier falsch jetzt?
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)