Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Multiples Countdownsystem mit nur einem Timer (https://www.delphipraxis.net/167876-multiples-countdownsystem-mit-nur-einem-timer.html)

Ajintaro 23. Apr 2012 15:56

Delphi-Version: XE2

Multiples Countdownsystem mit nur einem Timer
 
Hallo DP!

Ich habe ein altes Delphi Programm wieder ausgegraben und wollte es etwas modernisieren. Damals gab es ca. 10 verschiedene Prozesse, welche nach Ablauf eines countdowns angestossen werden sollten. Nunja damals hatte ich einfach 10 Timer auf dem Formular...:oops:

Nun jetzt ist die Anzahl an Prozessen auf 30 angewachsen und ich möchte sie weiterhin countdown-gesteuert aufrufen, jedoch mit nur einem Timer. Folgendes hab ich mir da ausgedacht:

- eine Funktion ermittelt ab wann ein Prozess gestartet werden kann
- ein Timer ruft die o.g. Funktion jede Sekunde pro Prozess auf

Delphi-Quellcode:
const
//Prozessname und Prozess ID
server_anpingen = 1;
datei_erstellen = 2;
logfile_schreiben = 3;
warnmeldung_ausgeben = 4;
...
der_letzte_prozess = 29;

//ein array fuer die startzeiten der einzelnen prozesse
private
{ Private-Deklarationen }
prozess_startzeit: array [0..30] of TDatetime;

//eine funktion zum ermitteln des startzeitpunkts eines prozesses
function ermittle_prozessstart(countdown: integer): TDatetime;
begin
  //jetzt + countdown in Sekunden
  result := now + countdown;
end;

//der button zum aktivieren des countdowns. Hier wird ermittelt, wann der prozess: server_anpingen gestartet werden kann
procedure TFmain.Button3Click(Sender: TObject);
begin
 prozess_startzeit[server_anpingen] := ermittle_prozessstart(60);
end;

//Ein TImer startet die events wenn Startzeitpunkt erreicht
procedure TFmain.timer(Sender: TObject);
begin
 if prozess_startzeit[server_anpingen] >= now then starte_prozess(server_anpingen);
 if prozess_startzeit[datei_erstellen] >= now then starte_prozess(server_anpingen);
 if prozess_startzeit[logfile_schreiben] >= now then starte_prozess(server_anpingen);
 if prozess_startzeit[warnmeldung_ausgeben] >= now then starte_prozess(server_anpingen);
end;
Damit könnte ich theoretisch sekundengenau alle Prozesse zum richtigen Zeitpunkt starten. Mir fällt nichts besseres ein :?
ZUmal ich auch noch nicht genau weiss wie ich von now z.B. 60 Sekunden hinzuaddieren kann...

Bummi 23. Apr 2012 16:17

AW: Multiples Countdownsystem mit nur einem Timer
 
Delphi-Quellcode:
uses dateUtils;
{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
  Caption := TimeToStr(Now) +' - ' + TimeToStr(Now + 1/24/60/60 * 60  ) + ' - ' + TimeToStr(IncSecond(now,60) )
end;

Iwo Asnet 23. Apr 2012 16:20

AW: Multiples Countdownsystem mit nur einem Timer
 
Delphi-Quellcode:
JetztPlusEineStunde := Now + 1 / 24; // 24 Stunden pro Tag (ach was)
JetztPlusEineMinute := Now + 1 / 1440; // 1440 Minuten pro Tag
JetztPlusEineSekunde := Now + 1 / 86400: // 86400 Sekunden pro Tag

Ajintaro 23. Apr 2012 16:22

AW: Multiples Countdownsystem mit nur einem Timer
 
Super, damit müsste mein Plan umsetzbar sein :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz