tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
1823
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Klein0r
    Klein0r Klein0r ist offline Mitglied Platin
    Registriert seit
    Sep 2007
    Ort
    Paderborn
    Beiträge
    718
    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:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    Timer t = new Timer();
    t.Tick += new EventHandler(t_Tick);
    t.Interval = 1000 * 60 * 60 * 24; // Every day
    t.Start();
     
    void t_Tick(object sender, EventArgs e)
    {
        // Do it
    }

    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ß
     

  2. #2
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    Was ist daran nicht kurz?
     

  3. #3
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    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.

  4. #4
    Avatar von WiZdooM
    WiZdooM WiZdooM ist offline Mitglied Brokat
    Registriert seit
    Oct 2003
    Ort
    Hessen
    Beiträge
    344
    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

  5. #5
    Avatar von Klein0r
    Klein0r Klein0r ist offline Mitglied Platin
    Registriert seit
    Sep 2007
    Ort
    Paderborn
    Beiträge
    718
    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ß
     

  6. #6
    Ringelsocke 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
     

  7. #7
    Avatar von StupidBoy
    StupidBoy StupidBoy ist offline Mitglied Gold
    Registriert seit
    Aug 2005
    Ort
    Bremen
    Beiträge
    197
    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

  1. Funktion für bestimmte Zeit laufen lassen
    Von AvS im Forum Java Grundlagen
    Antworten: 1
    Letzter Beitrag: 13.12.08, 01:07
  2. Antworten: 2
    Letzter Beitrag: 11.04.05, 21:10
  3. Bilder täglich zu einer bestimmten Zeit tauschen?
    Von DerPhil im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 04.03.04, 15:37
  4. Funktion erst nach gewisser Zeit ausführen lassen
    Von arcanon im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 26.10.03, 18:58
  5. PHP-Skript 1x täglich ausführen
    Von Bombi im Forum PHP
    Antworten: 12
    Letzter Beitrag: 08.04.03, 21:57