Diese Komponenten haben i.R. einen eigenen TimeoutTimer, welcher einfach nur auf eine Sekunde reduziert werden müsste.
Aber auch bei weitem leider nicht überall. Es gibt Dinge bei denen man nicht kontrollieren kann wie lange sie maximal blockieren.
Viel einfacher wäre es, wenn die Lizenzbedingungen es zulassen, von einer bald 20 Jahre alten Entwicklungsumgebung auf etwas neueres zu wechseln das z.B. "Tasks" hat. Dann sieht es in Delphi nur noch so aus:
Delphi-Quellcode:
function TForm1.holeNetzwerkDaten(): Integer;
begin
TThread.Sleep( Random(1000) );
Result := 42;
end;
function TForm1.holeNetzwerkDaten(const timeoutMs: Word): Integer;
const
standardWert: Integer = 99;
var
future: IFuture<Integer>;
begin
future := TTask.Future(
function(): Integer
begin
Result := holeNetzwerkDaten();
end
);
if future.Wait(timeoutMs) then
Result := future.Value
else
begin
future.Cancel();
Result := standardWert;
end;
end;
Könnte so einfach sein 😉