Laden...

Systemuhr abfragen

Letzter Beitrag vor 18 Jahren 18 Posts 2.684 Views
Systemuhr abfragen

hi,
ich hab da mal ne frage!
ich habe einen WindowsDienst, der immer wenn es 7:?? uhr ist etwas machen soll.
nun will ich aber nicht den ganzen tag einen timer laufen lassen und auch nicht jede stunde gucken, ob es 7uhr ist. gibt es da noch eine andere möglichkeit?
sowas wie einen eventhandler für die systemzeit, der auslöst wenn es 7uhr ist oder so?

danke!!!

MFG Veasel

Um einen timer wirst du wohl nich rumkommen. Wie sonst soll das programm von sich aus wissen, dass es überhaupt nachgucken muss obs 7 uhr ist?

Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de

...

naja, dachte es gibt villeicht so was wie nen event wenn es 7 ist. so wie man auch nen eventhandler auf eine verzeihnis legen kann und triggert wenn eine datei kopiert oder geändert wird.
aber sowas scheint es nicht zu geben... irgendwie mist!!!
dann wohl doch der stunden-timer was???

MFG Veasel

Würd ich auch vorschlagen. So ein timer_tick braucht ja eh fast keine resourcen.

Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de

benutz doch den windows taskplaner oder wie der heisst. dort kann man glaubs solche regeln einstellen, resp. applikationen um gewisse zeiten starten lassen.

Berechne halt das Intervall, bis wann der Timer ausgelöst werden soll


 DateTime target = DateTime.Parse("7:00");
 TimeSpan intervall = target.Substract(DateTime.Now);
 Time meinTimer = new Timer();
 meinTimer.Interval = intervall * 10000.0;
 meinTimer.Start();

So kannst du dir sogar die mini Resourcen (von frisch vorgeschlagen) sparen. Der Timer löst genau 1x ein Elapsed-Ereignis aus. Das ist doch das, was du woltest.

@cmpxchg

Bist du dir sicher, das man den Intervall auf die Verbleibende Zeit setzen sollte? Du musst dir überlegen, dass so unglaublich riesige Zahlen in den Interval geschrieben werden.

Vor allem da der Interval eine Variable vom Datentyp int ist.

Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de

Keine gute Idee. Man denke nur an die Zeitumstellung (könnte man noch lösen), schlimmer wäre aber das Verstellen der Zeit, etc.! Am besten jede Minute einmal den Event auslösen, Zeit abfragen und los gehts. Wegen der Systemressourcen braucht man sich da wohl keine Sorgen machen.

Hi,

nur mal so: Bist du dir sicher, dass int nicht ausreicht? Rein überschlagen müsste man doch in Millisekunden über 'nen Monat kommen können.
Außerdem kann man doch die aktuelle Zeit in Ticks (1/18 sec) seit 1970 oder so ermitteln... (rein Zahlengrößentechnisch) //[später] Hm, im MSDN steht "Der Wert dieser Eigenschaft ist die Anzahl der 100-Nanosekunden-Intervalle, die seit dem 1. Januar 1, 00:00:00 vergangen sind." Ist jedoch ein long.

Ansonsten würde ich das auch so machen, dass ich ausgehend von der aktuellen Zeit die Aktivierungszeit für den Timer ausrechnen würde. Oder am einfachsten wären wohl die geplanten Tasks.

Gruß
dN!3L

...

danke, dass ihr euch so feini mit dem thema beschäftigt!!!

die geplanten tasks hatte ich auch schon vor aber wollte ich dann nicht machen, will lieber nen windowsdeinst progen.

den timer jede mitute triggern zu lassen ist nicht sinnvoll, da ich dann bis zu 59 mal in der stunde 8 eines tages das elapsed ereignis meines timers ausführe. es darf aber nur GENAU 1x zwischen 7 und 8 auftreten, deshalb lass ich ihn immer nach einer stunde gucken, ob es schon 7:?? ist, sollte doch gehen oder?
und wenn ihr meint, dass das ticken des timers keine ress verschlingt dann ist das okay! das wußte ich auch nicht so genau, wieviel das nimmt.

danke euch!!!

einen schönen tag noch....
grüße von der küste

MFG Veasel

wenn du jede stunde prüfst ob es zwischen 7 und 8 ist, dann ist das ja, abgesehen von der häufigkeit, die gleiche vorgehensweise als wenn du jede minute prüfst ob es zwischen 7 und 8 ist

wie jemand schon treffend sagte, der user könnte ja die systemuhr verstellen... was is dann mit deiner stunde?
von daher wäre pro minute oder aller 5 minuten schon besser

wie oft der timer nun triggert ist aus programmsicht egal
du prüfst dann eh erstmal wie spät es ist und führst nur dann deine operationen aus, wenn es zwischen 7 und 8 ist...

gibt es eigentlich nen grund warum du zwischen 7 und 8 und nicht nur nach 7 prüfen möchtest?
stell dir vor es war zeitumstellung und der benutzer stellt den pc zwischen 7 und 8 an... was nu?

...

also der dienst läuft auf nem server, der seine zeit im i-net aktualisiert also denke ich mal die zeitumstlleung ist zu vernachläßigen aber wir alle wissen ja der fehler steckt im detail und marphy kommt immer dann wenn wir gerade schon die bude voll haben... also nochmal danke für diesen hinweis denn daran hab ich gar nicht gedacht.

aber zurück, also es hat kein user zugang zur systemuhr außer mir und den admis.
zwischen 7 und acht ist eigentlich nur so weil, die dateien die ich mit meinem deinst kopiere zwischen 6:30 und 7 per ftp kommen und dann dann geh ich davon aus, dass bin 8 noch keiner damit arbeiten will... naja dann dürfen die eben nur einmal kopiert werden und nicht mehrmals auch nicht am nächsten tag, weshalb ich die zeit und datum des letzten kopierens wegschreibe(verschlüsselt).

wenn ich das alle minute machen würde, würde er mir alle dateien kopeiren die auch zwischen 7 und 8 eintreffen, das darf aber nicht sein, denn die dürfen erst am nächsten tag kopiert werden.

alles sehr umständlich!!

by the way... wie mache ich das wenn ich eine meldung am ende des kopierens in ein eigenes eventlog schreiben will. hab auch schon code geschrieben, kann ich morgen gerne mal posten, bin aber leider schon im wohlverdienten feierabend!!
also an alle, die noch arebiten müssen. macht nicht so lange....!!!!

grüße

MFG Veasel

Hi veasel,
wenn du Zugriff auf das Verzeichnis hast, kannst du da nicht auf Änderungen im Verzeichnis triggern? Wenn die neuen Dateien da sind, diese wegschreiben?

Mal so nebenbei, zu HOFFEN das die User dann noch nicht mit den Dateien arbeiten, wird schief gehen! Nicht jetzt und heute, aber ...

Detlef

...

nee das klappt schon, da sie ja nur mit den dateien arebiten können, die schon kopiert sind, also wenn sie es früher versuchen, sind ja noch keine da und sie können nichts machen.

naja, ich will ja nicht auf eine neue datei in dem verzeichnis triggern sondern auf die uhrzeit und dann alle neuen dateien seit dem letzten mal kopieren.

kann mir denn einer was zu eventlogs sagen?
wie erstellt man ein neues, der will immer einer "source" haben unter welchem namen die anwendung registriert ist auf dem pc, aber es ist ja keine anwendung soder nur ein dienst. wie macht man das?

danke...

MFG Veasel

Hallo veasel,

naja, ich will ja nicht auf eine neue datei in dem verzeichnis triggern sondern auf die uhrzeit und dann alle neuen dateien seit dem letzten mal kopieren.

Es gibt hierzu doch Dateiattribute, die gab es schon zur Dos-Zeit, und da waren sie auch noch rege am benutzt werden.

Heutzutage ist das fast in Vergessenheit geraten, leider.

Denn Du könntest alle Dateien, die Du schon kopiert hast mit dem Attribut 'Archiv' markieren. So kannst Du alle Dateien kopieren, die dieses Merkmal noch nicht besitzen. So sparst Du zumindest Deine lästige Überprüfungsmethode, ob schon kopiert, oder nicht.

Das Zeitproblem wurde meiner Meinung nach ja schon ausreichend diskutiert...

Ciao
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

...

das ist natürlich auch eine möglichkeit aber überleg mal wie oft er dann am tag triggert. immer wenn eine datei ankommt und dann kopiert es auch schon, dass soll ja gerade nicht so sein. sondern es soll nur zwischen 7 und 8 kopiert werden.

an die dateiatribs hab ich gar nicht gedacht, habs wie schon geschrieben mit der urzeit und dem datum des letzten kopierens in ner datei gemacht.

krieg ich mit dem archivbit nicht probs bei der sichereung?

MFG Veasel

Original von veasel
das ist natürlich auch eine möglichkeit aber überleg mal wie oft er dann am tag triggert.

Wie bereits gesagt: Ob deine Kiste 10.000 mal pro Tag einen Event bekommt: Du wirst es nicht merken. Dagegen ist das Vorgehen mit der minütlichen Triggerung sicher (Zeitumstellung, usw.) und zeitnah. Der Schedule-Dienst dürfte sogar sekündlich triggern...

das ist natürlich auch eine möglichkeit aber überleg mal wie oft er dann am tag triggert. immer wenn eine datei ankommt und dann kopiert es auch schon, dass soll ja gerade nicht so sein. sondern es soll nur zwischen 7 und 8 kopiert werden.

ich hab das gefühl du verstehst nicht ganz wie wir das mit dem kopieren meinen...

ja, der event wird öfters ausgelöst, aber du prüst in der methe dann die uhrzeit und erst dann kopierst du

mal als pseudoce, der ausgeführt wird, wenn timer event feuert

wenn heute noch nicht kopiert dann
    wenn uhrzeit zwischen 7 und 8 uhr dann
        kopiere meine dateien
        setze flag das heute schon kopiert
    ansonsten
        tue nichts
ansonsten 
    wenn uhrzeit zwischen 0 und 1 dann
        setze flag das heute noch nicht kopiert
    ansonsten
        tue nichts

so in der art ist das gemeint