Autor |
Beitrag |
glnklein
Hält's aus hier
Beiträge: 13
|
Verfasst: Mo 26.03.12 00:13
hallo ,
ersteinmal ich blutiger anfänger und habe noch so gut wie keine ahnung von C#
ich möchte eine if anweisung die nur eintrit wenn es zb. 15.05 uhr , 15.10 uhr , 15.15 uhr ,usw ist .
also ausführen alle 5 minuten egal welche stunde und welcher tag , ach und natürlich auch nur einmal alle 5 minuten
also nicht um 15.05 und 10 sec und dann nochmal um 15.05 und 30 sec das bitte nicht .
ich dachte zuerst an einen timer nur der unterbricht mein programm ja oder etwa nicht ?? Moderiert von Th69: Topic aus WinForms verschoben am Mo 26.03.2012 um 10:13
|
|
jaenicke
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 26.03.12 01:04
Hallo und
Der Timer unterbricht nix, dein Code muss im Timer-Event stehen, so dass du auf das Ereignis reagierst.
Eine ständig laufende Schleife, die z.B. mit einer if-Abfrage prüft, ob die Zeit erreicht ist, ist keine so gute Idee. Denn dann muss ja ständig geprüft werden. Viel einfacher ist doch, wenn du einfach vom Timer gesagt bekommst, dass nun wieder 5 Minuten herum sind. 
|
|
glnklein 
Hält's aus hier
Beiträge: 13
|
Verfasst: Mo 26.03.12 08:23
Guten morgen
Wie müste ich das den dann schreiben ?
Die Abfrage steht in einem Loop der mir ca jede Minute
In einer console zeigt ob mein eigener Server noch erreichbar ist.
Der Zweck der 5 min Abfrage ist eigentlich das ich nicht bei jeder Abfrage eine
Ausgabe bekomme sondern halt alle 5 min es angezeigt wird , die Abfrage prüft
Zwar ständig nur die Ausgabe in der console wollte ich auf alle 5 min beschrecken.
Ich dachte mit
If mm = "05"
{
Ausgabe console
}
Damit müste nur alle Intervalle auflisten was ja doof ist
|
|
jaenicke
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 26.03.12 08:38
Erstens reicht es zu schauen, ob die Zahl durch 5 teilbar ist (sprich die Zahl modulo 5 == 0 ist).
Und zweitens:
Worum geht es dir eigentlich? Um das Ausführen alle 5 Minuten, egal wann, oder um das Ausführen zu genau diesen Zeiten?
Soweit ich das verstanden habe, geht es doch nur um die 5 Minuten Abstand, oder? Und genau das macht ein Timer. Du setzt das Intervall auf 5 Minuten und packst deinen Code in das Timer-Event und fertig.
Ich sehe jetzt allerdings, dass du eine Konsolenanwendung hast. Warum? Denn damit kannst du den Timer nicht nutzen und musst immer das Konsolenfenster offen haben...
Wenn du das damit machen willst, bleibt dir in der Tat nur zu schauen, ob die Minute durch 5 teilbar ist.
|
|
glnklein 
Hält's aus hier
Beiträge: 13
|
Verfasst: Mo 26.03.12 10:17
durch 5 teilbar ist eine super idee , wie müste der code den aussehen das erst die aktuelle minuten zahl geteilt wird ????
danke
|
|
jaenicke
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 26.03.12 11:34
Siehe Liste der Operatoren:
msdn.microsoft.com/d...ibrary/6a71f45d.aspx
Und bei den multiplikativen Operatoren findest du auch den für modulo:
msdn.microsoft.com/d...ibrary/0w4e0fzs.aspx
|
|
glnklein 
Hält's aus hier
Beiträge: 13
|
Verfasst: Mo 26.03.12 13:59
Da blick ich nicht ganz durch wie muss den dann der Code
Aussehen und was muss ich da noch rein setzen damit es auch nur einmal alle 5 Minuten ausgeführt wird ?
|
|
daeve
      
Beiträge: 116
Erhaltene Danke: 3
Windows (XP Pro, 7 Ultimate x64)
C#,WPF,Java,ASP.Net, VS 2010 Ultimate (x86)
|
Verfasst: Mo 26.03.12 15:23
mit einem Timer Objekt kannst du alle 5 min einen Code ausführen. (wie jaenicke breits erwähnt hat)
Der Code sollte selbsterklärend sein.
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| Timer t1 = new Timer(); t1.Interval = 100; t1.Tick+=new EventHandler(t1_Tick); t1.Start(); void t1_Tick(object sender, EventArgs e) { } |
hoffe damit kommst du weiter.
|
|
jaenicke
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 26.03.12 15:42
Geht aber nur so einfach, wenn es nicht mehr nur eine Konsolenanwendung ist. 
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Mo 26.03.12 16:01
Wenn man nicht gerade den Winforms Timer nimmt (wie scheinbar daeve) sondern den aus dem System.Threading oder System.Timers Namespace dann schon.
|
|
glnklein 
Hält's aus hier
Beiträge: 13
|
Verfasst: Mo 26.03.12 16:28
Mit dem Tuner das geht nicht da ich ja bereits einen Loop habe ,
Die Idee mit dem durch 5 teile halte ich für die beste
So in etwa habe ich mir das gedacht
$uhrzeitinminuten = ja wo die Minute Zahl hernehmen
$Ergebnis = $uhrzeitinmunuten/5
If $Uhrzeitinminuten == 0
{
Code ausfuhren
}
else
{
Nix machen
}
60sec nicht nochmal ausgeführt werden soll und fertig ,und Konsole muss bleiben sorry
|
|
ujr
      
Beiträge: 102
Erhaltene Danke: 12
|
Verfasst: Mo 26.03.12 16:44
glnklein hat folgendes geschrieben : | Mit dem Tuner das geht nicht da ich ja bereits einen Loop habe ,
Die Idee mit dem durch 5 teile halte ich für die beste
|
Was für ein "Tuner"?
So richtig verstehen kann ich Dich sowieso nicht. Du schreibst, dass Du "blutiger Anfänger" bist und keine Ahnung hast. Dann rät man Dir zu einem Timer, der tatsächlich für das gewünschte das Mittel der Wahl ist, und dann meinst Du alles besser zu wissen? Wenn Du einen Loop hast, dann schreib ihn um. Sowas wird Dir noch öfter passieren.
Und nein, wenn Du keine Lust hast, bei Google z. B. "C# Uhrzeit" einzugeben, dann werde ich Dir auch nicht sagen, wo Du die herbekommst.
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Mo 26.03.12 16:49
Zitat: | Mit dem Tuner das geht nicht da ich ja bereits einen Loop habe |
Beim Programmieren ist es durchaus üblich auch bereits vorhanden Code wieder zu ändern. Dafür gibts keine Minuspunkte.
Zitat: | 60sec nicht nochmal ausgeführt werden soll und fertig |
Für die 60sec würde ich jetzt schon wieder einen Timer empfehlen. Warum dann nicht gleich für das eigentliche Problemchen?
|
|
glnklein 
Hält's aus hier
Beiträge: 13
|
Verfasst: Mo 26.03.12 23:47
Ich wollte dann doch nicht ein Problem lösen um es durch ein anderes zu ersetzen ,
wenn du an deinem auto einen vorne links einen platten hast nimst du ja auch nicht ein rad von hinten rechts um vorne das problem zu lösen
ich hab es jetzt so gemacht und es klappt :
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| DateTime saveNow = DateTime.Now; int minute = saveNow.Minute; if ((minute % 5) == 0) {
Log.Info("ohne Rest teilbar"); System.Threading.Thread.Sleep(60000); for (int i = 0; i < 100; i++) { Log.Info("Jetzt gehts erst weiter "); }
} else { Log.Info("nicht ohne Rest teilbar"); } |
der Code geht bestimmt auch kürzer aber für mich als anfänger ist er so übersichtlicher
Danke an alle
|
|