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...