AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Automatischen E-Mail Versand Sinnvoll und Resourcensparend
Thema durchsuchen
Ansicht
Themen-Optionen

Automatischen E-Mail Versand Sinnvoll und Resourcensparend

Ein Thema von Jens Hartmann · begonnen am 16. Nov 2009 · letzter Beitrag vom 18. Feb 2010
 
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#9

Re: Automatischen E-Mail Versand Sinnvoll und Resourcenspare

  Alt 18. Feb 2010, 21:10
Ich habe jetzt die Lösung fertig und komplett. Ich musste allerdings aus verschiedenen Gründen noch einige Änderungen vornehmen. Hier mal der Code mit Erklärung...

Delphi-Quellcode:
//Programmstart
procedure TForm1.FormCreate(Sender: TObject);
var
...
begin
...
SetTimer1IntervalEMailStart;//Aufruf in Form.Create oder ähnlichem
end;

//Funktion setzt den Timer.Interval nach dem Programmstart je nach Abhängigkeit der Tageszeit
function TForm1.SetTimer1IntervalEMailStart : Boolean;
var
  TimeNow : String;
  TimeSend : String;
const
  HalfDay = 43200000;//1000ms * 60 Sek * 60 Min * 12 Std
begin
  SendEMailTimer1.Enabled := false;
  TimeNow := TimeToStr(Now);//Aktuelle Zeit
  TimeSend := '20:05:00';//Nächste Startzeit
  if TimeSend > TimeNow then //Prüfung ob Sendezeit für aktuellen Tag schon vorbei
    begin
      //Zeitpunkt für nächsten Step festlegen
      SendEMailTimer1.Interval := MilliSecondsBetween(frac(StrToTime(TimeNow)),
        frac(StrToTime(TimeSend)));
    end
  else
    begin
      //Zeitpunkt festlegen wenn Step für aktuellen Tag vorbei
      SendEMailTimer1.Interval := HalfDay - MilliSecondsBetween(frac(StrToTime(TimeNow)),
        frac(StrToTime(TimeSend)))+ HalfDay;
    end;
  SendEMailTimer1.Enabled := true;
end;

//Funktion setzt den Timer.Interval nach erstem TimerOn auf den Tages Step
function TForm1.SetTimer1IntervalEMailTimer : Boolean;
var
  TimeStep : 1..24;//Abstand in Stunden
const
  Hour = 60000;//1 Stunde in ms
begin
  SendEMailTimer1.Enabled := false;
  TimeStep := 1;//TimeStep zuweisen z.B. aus Datenbank
  SendEMailTimer1.Interval := TimeStep * Hour;//Interval Berechnen
  SendEMailTimer1.Tag := 1;//Tag setzen, damit Funktion nur 1 mal ausgeführt wird
  SendEMailTimer1.Enabled := true;
end;

//Timer Ereignis
procedure TForm1.SendEMailTimer1Timer(Sender: TObject);
begin
  ServiceMemo.Lines.Add(TimeToStr(Time));//Funktion die durch den Timer ausgeführt wird
  ...
  if SendEMailTimer1.Tag <> 1 then //Abfrage ob Tag ungleich 1
    SetTimer1IntervalEMailTimer; //Wenn Tag ungleich 1, dann einmal den Interval neu setzen.
end;
Durch die zwei verschiedenen Funktion für das setzten des Timer.Interval, kann realisiert werden, das der Timer nach dem Programmstart um eine bestimmte Uhrzeit ein Ereignis ausführt und anschließend in einen Inteval Modus wechselt.

Somit kann ich in den Behandlungsroutinen festlegen:
Code:
Nächstes Ereignis um: 22:00:00

Abstand: 12 Std
Funktionieren tut es aufjedenfall. Ob es die beste Lösung ist weiß ich nicht. Aber ich hoffe es ist nicht die schlechteste.

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz