Einzelnen Beitrag anzeigen

Benutzerbild von Ajintaro
Ajintaro

Registriert seit: 20. Okt 2004
Ort: Sankt Augustin
138 Beiträge
 
Delphi XE6 Starter
 
#1

Multiples Countdownsystem mit nur einem Timer

  Alt 23. Apr 2012, 16:56
Delphi-Version: XE2
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...

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...
Jaimy
DAoC 2.0 -> Camelot Unchained !
  Mit Zitat antworten Zitat