![]() |
Wie Prozedur immer zu best. Zeit starten ohne Taskplanner?
vorab dieser beitrag hat mir nicht geholfen
![]() Hallo Delphigemeinde, wie schaffe ich es in meinem Programm, welches permanent läuft eine bestimmte Procedure z.b "ReadNews" zu einer bestimmten Zeit zu starten. Die Zeitspanne "von" bis "bis" wird der User eingeben. Z.b von 14:00 bis 16:00 immer Nachmittags. kann ich irgendwie im Timer den interval aus dem Abstand der "bis-zeit" und der nächsten "von-Zeit" setzen oder wie würdet ihr sowas machen? danke für die tipps. Julia |
Re: Wie Prozedur immer zu best. Zeit starten ohne Taskplanne
Du könntest einen Dienst scheiben
|
Re: Wie Prozedur immer zu best. Zeit starten ohne Taskplanne
wie würde sowas aussehen können?
|
Re: Wie Prozedur immer zu best. Zeit starten ohne Taskplanne
|
Re: Wie Prozedur immer zu best. Zeit starten ohne Taskplanne
das würde bedeuten ich müsste mein ganzes programm umschreiben und nicht eine normale Anwendung erstellen sondern eine Dienstanwendung?
das würde ja mein problem "zu bestimmter zeit eine Procedur starten während das programm immer läuft" doch nicht lösen oder? |
Re: Wie Prozedur immer zu best. Zeit starten ohne Taskplanne
Wenn das Programm sowieso permanent läuft, warum dann keinen Timer nehmen?
|
Re: Wie Prozedur immer zu best. Zeit starten ohne Taskplanne
Doch der Dienst müsste nur mit der Anwendung kommunizieren ( Named Pipes; IPC, ...)
|
Re: Wie Prozedur immer zu best. Zeit starten ohne Taskplanne
belastet der timer arg mein system während er sag ich mal 24 stunden wartet bis erneut 13:00 Nachmittags ist und meine Funktion aufruft?
wie könnte die implementierung aussehen? irgendwie so?
Delphi-Quellcode:
das klappt nicht denn alle 2 Sek startet meine funktion ohne das Zeit geprüft wird :cry:
procedure TForm1.FormCreate(Sender: TObject);
var timer : TTimer; begin Timer := TTimer.Create(self); Timer.Interval := 2000; if now = StrToDatetime(DateToStr(Now)+'14:00:00') then Timer.Enabled := True; Timer.OnTimer := StarteFunktion; end; |
Re: Wie Prozedur immer zu best. Zeit starten ohne Taskplanne
Du sagst es ihr ja auch, und dann wird die Funktion aufgerufen. Du musst in der Eventmethode die Uhrzeitünerprüfung durchführen und dann ggf die gewünschte Aktion ausführen.
|
Re: Wie Prozedur immer zu best. Zeit starten ohne Taskplanne
könnte das dann vielleicht so funktionieren?
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var timer : TTimer; begin Timer := TTimer.Create(self); Timer.Interval := 2000; Timer.Enabled := True; Timer.OnTimer := StarteFunktion; end; procedure TForm1.StarteFunktion; begin // Prüfen ob die Anfangszeit erreicht ist if now = StrToDatetime(DateToStr(Now)+'14:00:00') then begin // Timer ausschalten timer.Enabled := false; // Wiederholen bis die Endzeit erreicht ist repeat StarteEineBestimmteProcedure; until now >= StrToDatetime(DateToStr(Now)+'16:00:00'); // Timer wieder einschalten timer.Enabled := True; end; end; |
Re: Wie Prozedur immer zu best. Zeit starten ohne Taskplanne
Was wenn der Timer eine Sekunde nach zwei Uhr aufgerufen wird? Die Abfrage muss auf größer lauten und nicht auf gleich.
Zitat:
|
Re: Wie Prozedur immer zu best. Zeit starten ohne Taskplanne
Nein, denn das hat 2 Probleme:
-Da du genau abfragst, ist es sehr wahrscheinlich, dass es nie wahr wird. -wenn einmal gestartet ist, friert es dein System ein. Soll deine Prozedur wirklich ununterbrochen aufgerufen werden?
Delphi-Quellcode:
procedure TForm1.StarteFunktion;
begin // Prüfen ob die Anfangszeit erreicht ist if now > EncodeTime( 14, 0, 0) and Now < EncodeDate(16,0,0) then begin StarteEineBestimmteProcedure; end; end; |
Re: Wie Prozedur immer zu best. Zeit starten ohne Taskplanne
ja in der zeitspanne dieser 2 stunden soll das Programm etwas abarbeiten, ist z.b 16:00 erreicht soll sie aufhören und 24 stunden später erneut anfangen
|
Re: Wie Prozedur immer zu best. Zeit starten ohne Taskplanne
Was macht diese Funktion denn? Muss sie kontinuierlich neu aufgerufen werden? Das könntest du mit einem Thread regeln, ansonsten friert das Programm ein.
|
Re: Wie Prozedur immer zu best. Zeit starten ohne Taskplanne
diese Funktion guckt an einem bestimmten Ort nach ob Dateien da sind, wenn ja ließt sie die Inhalte in die DB. In dieser Zeispanne können nach einander mehrere Dateien reinkommen und die Funktion prüft nach der Abarbeitung einer Datei ob eine neue da ist und macht immer so weiter bis Endzeitpunkt erreicht ist. 24 Std. später muss erneut diese Funktion aufgerufen werden, ohne das Programm neustarten zu müssen!
|
Re: Wie Prozedur immer zu best. Zeit starten ohne Taskplanne
Wenn eine bestimmte Zeit vorgegeben ist, ist die beste Lösung ein Waitable Timer.
|
Re: Wie Prozedur immer zu best. Zeit starten ohne Taskplanne
hierzu hab ich nur das gefunden
![]() als NuberOfSeconds müsste ich dann mein Abstand nehmen? hätte gedacht das es einfacher geht :-) |
Re: Wie Prozedur immer zu best. Zeit starten ohne Taskplanne
Das meinte ich nicht. Lies dir doch mal die
![]() Die Materie kann allerdings sehr verwirrend sein, wenn man sich nicht mit Windows-Programmierung auskennt. |
Re: Wie Prozedur immer zu best. Zeit starten ohne Taskplanne
ich DANKE ersteinmal allen beteiligten für die hilfreichen Antworten!!!!
ich werde mir bei gegenheit die Doku auf jedenfall mal ansehen und nach besserer Lösung dort suchen. auf die schnelle hab ich das nun so gelöst, es funktioniert für meine Anforderungen zumindest:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin Timer := TTimer.Create(self); Timer.Interval := 1000; Timer.Enabled := True; Timer.OnTimer := StarteMeineFunktion; end; procedure TForm1.StarteMeineFunktion(Sender: TObject); var Y, M, D : Word; Startzeit, Endzeit : TDatetime; begin // Aktuelles Datum entschlüsseln DecodeDate(Now, Y, M, D); // Startzeit und Endzeit vorbelegen Startzeit := EncodeDate(Y,M,D) + EncodeTime(14,0,0,0); Endzeit := EncodeDate(Y,M,D) + EncodeTime(16,0,0,0); // Prüfen, ob ich innerhalt der Zeitspanne bin if (now > Startzeit) and (Now < Endzeit) then begin // Timer aussetzen timer.Enabled := false; BEGINNEMITDEMLESEVORGANG; // Timer erneut einschalten timer.Enabled := true; end end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 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