Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.155 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Default-Wert aus Funktion nach timeout (D6)

  Alt 31. Jul 2019, 09:34
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 😉
  Mit Zitat antworten Zitat