ERLEDIGT
NEIN
NEIN
ANTWORTEN
6
6
ZUGRIFFE
1823
1823
EMPFEHLEN
-
Hallo zusammen,
ich suche nach einer Lösung, eine bestimmte Funkion täglich um eine definierte Uhrzeit auszuführen.
Mit einem Timer könnte man ja das 24 Stunden-Problem lösen:
Code csharp:
Aber wie führe ich die Start-Methode um eine bestimmte Zeit aus?
Bin für jeden Ratschlag dankbar!
Gruß
Folgendes wäre natürlich auch ein Ansatz - wenn auch etwas umständlich (UNGETESTET):
Code csharp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
public class TimerTest { private Timer t = null; public TimerTest() { t = new Timer(); t.Tick += new EventHandler(t_Tick); // Calculate first start DateTime startTime = DateTime.ParseExact("2010-07-01 23:00", "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture); t.Interval = (startTime - DateTime.Now).Milliseconds; t.Start(); } void t_Tick(object sender, EventArgs e) { // Set the next interval t.Interval = 1000 * 60 * 60 * 24; // Every day // Do it } }
Sowas suche ich in kurz
Gruß
-
Was ist daran nicht kurz?
-
01.07.10 12:29 #3
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
Wie wär's mit Quartz.NET (http://quartznet.sourceforge.net/)?
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Hmm, das setzt voraus, dass dein Programm 24/7/52 läuft. Je nachdem wo das Programm dann läuft, musst du halt schauen, dass das nicht so viel Leistung frisst.
Auch wenn es eigtl. mehr OT ist, würde ich die entsprechende Operation als dll oder exe compilen und mit einem Task ausführen. Der ist auch etwas "wiederstandsfähiger", wenns mal zu einem critical Systemreboot kommt. Ein weiterer Vorteil ist, dass du nur soviel RAM und CPU-Zeit benötigst wie die eigentliche Operation auch tatsächlich braucht in der Zeit in der sie läuft.
Ich hab selbst mal ein solches Problem gehabt, mit einem kleinen Konsolentool, dass das Filesystem aufräumt und eben überlegt wie ich das Programm immer wieder zu einer bestimmten Uhrzeit jeden Tag starte. Ich habs dann einfach effizient und unkompliziert mit dem Taskplaner gemacht. Aber das nur mal am Rande.
Ich habe auch schonmal mit dem Timer herumgespielt und festgestellt, dass selbst ein ausgelagerter Timer-Thread auf nicht so ganz leistungsstarken Systemen wie einem Single-Core einen immensen Performanceeinbruch verursacht - und da hab ich nur die Zeit ausgeben lassen und keine "Stopp-Uhr" gebaut. Aber prinzipiell kann man das schon so machen, dass man einen Timer in einen Thread schiebt, der dann wiederrum immer in einem Intevall die Operation ausführt. Beispiele fürs Threading gibbet im Netz zu Hauf.Gruß
Wizzy
-
Danke für die vielen Antworten - ich hatte einfach gehofft, dass das Framework für solche Fälle schon eine Lösung parat hat - aber muss man doch anscheinend selbst errechnen.
Da das Programm später auf Enterprise-System mit mindestens 4 Kernen und 16 GB RAM laufen wird, steht Ressourcen sparen nicht unbedingt im Vordergrund.
Ziel ist es, einmal am Tag eine neue Konfigurationsdatei via WCF-Webservice anzufordern, die sich eventuell geändert hat. Für so eine kleine Aufgabe im Programm möchte ich ungern einen extra Prozess starten. Über das Threading-Thema denke ich natürlich auch schon nach, da so ein Webservice-Zugriff natürlich den Programmablauf verzögern kann.
Quartz kenne ich noch garnicht - werde ich mir mal ansehen! Vielen Dank dafür
Dazu müsste ich mir aber auch nochmal das Lizenzmodell ansehen.
Weitere Antworten / Vorschläge sind immer willkommen!
Gruß
-
05.07.10 14:06 #6Ringelsocke Tutorials.de Gastzugang
hmm, also unter Vista hab ich sowas noch nicht probiert, aber unter älteren Windows-Versionen gab es doch da einen Task-Scheduler oder sowas, dort konnte man einstellen, dass ein bestimmtes Programm in regelmäßigen Abständen, z.B. einmal am Tag, ausgeführt werden sollte.
Wenn es das noch gibt bräuchtest du den Workaround mit .NET nicht, sondern nur ein einfaches Progamm dass die eigentliche Aufgabe macht und sich nicht ums Scheduling kümmern muss.
gruß
Ringelsocke
-
Alos, ich würde mir folgenden Artikel von codeproject.com Mal anschauen:
http://www.codeproject.com/KB/dotnet...ckArticle.aspx
Hab den nur mal angelesen, hört sicher aber meiner Meinuing nach ganz gut an. Der Ansatz geht wohl auch über nen eigenen Thread. Das ist meiner Meinung nach der einzig vernünftige Weg. Wenn man wegen eines einzelenen Threads der solch simple Aufgaben erledigt, ernsthafte Performanceprobleme bekommt, dann hat man definitiv etwas falsch gemacht.Grüße SB
Ähnliche Themen
-
Funktion für bestimmte Zeit laufen lassen
Von AvS im Forum Java GrundlagenAntworten: 1Letzter Beitrag: 13.12.08, 01:07 -
Wie kann ich ein Shell-Skript für eine bestimmte Zeit lang ausführen
Von Der nette Mann im Forum Linux & UnixAntworten: 2Letzter Beitrag: 11.04.05, 21:10 -
Bilder täglich zu einer bestimmten Zeit tauschen?
Von DerPhil im Forum Javascript & AjaxAntworten: 4Letzter Beitrag: 04.03.04, 15:37 -
Funktion erst nach gewisser Zeit ausführen lassen
Von arcanon im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 26.10.03, 18:58 -
PHP-Skript 1x täglich ausführen
Von Bombi im Forum PHPAntworten: 12Letzter Beitrag: 08.04.03, 21:57





Zitieren
Login





