Autor Beitrag
Manuals
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 17.06.13 11:36 
Hallo an alle,
bin hier ein absoluter Neuling und bin mir nicht ganz sicher, ob dieses Thema hier an der richtigen Stelle ist. Ich bitte um Verzeihung, sollte das nicht der Fall sein.

Also dann zum Problem:
Und zwar bin ich momentan dabei einen Dienst zu programmieren, der einige TCP-Strings empfängt und dann etwas damit macht. Jedoch sollen diese TCP-Strings nur dann ausgewertet werden wenn der Dienst quasi scharf geschaltet ist.

In meiner Datenbank(MSSQL) speichere ich meine Zeiträume in denen der Dienst scharf sein soll wie folgt:

nvarchar(50) int int time(1) time(1)
Wochentag Rollenzahl Rollenindex Startzeit Endzeit

Montag 1 1 07:00:00 18:00:00

Dienstag 2 1 07:00:00 12:30:00

Dienstag 2 2 15:30:00 20:00:00


Da die Phasen nie so lange sind hatte ich vor einen Timer zu nehmen.

Nun ist mir aber nicht ganz klar wie ich die DateTimes zu bilden habe, denn ich speichere kein Datum.

ausblenden Quelltext
1:
2:
3:
Erst hatte ich es dann mit folgendem versucht:
Timer a = new Timer;
a.Interval = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Days, <Stunden aus DB>, <Minuten aus DB>, <Sekunden aus DB>) - DateTime.Now).TotalMilliseconds();


Dies haut bei einem Tages-/Monats-/Jahreswechsel nicht hin. Und der Dienst soll 24/7/365 im Einsatz sein.

Hättet ihr vielleicht eine bessere Variante oder Ideen wie ich die Probleme umschiffen und den Dienst so realisieren kann?

Danke im vorraus
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4799
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 17.06.13 13:10 
Hallo Manuals :welcome:

bei einem Tageswechsel mußt du natürlich dann auch bei der Berechnung einen Tag drauf zählen.
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
DateTime datetime = DateTime.Now;
if (/* datetime.AktuelleUhrzeit > UhrzeitAusDatenbank*/)
   datetime = datetime.AddDays(1);

Timer timer = new Timer;
timer.Interval = new dateTime(datetime.Year, datetime.Month, datetime.Days, ...) - DateTime.Now).TotalMilliseconds;

P.S: Crossposts (s. Richtlinien 3.10 Crosspostings) bitte immer angeben myCSharp.de - Zeitschaltplan: Ermitteln, ob ein Zeitpunkt innerhalb eines Zeitraums liegt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 17.06.13 14:28 
Wofür ist der Timer gedacht?
Du empfängst Daten, prüfst ob du in einem Zeitraum bist in dem die Daten verarbeitet werden soll, und verwirfst oder bearbeitest die Daten dann eben. Aber wo kommt da ein Timer ins Spiel?

Wenn du tatsächlich den Dienst ausschalten willst wenn der nicht gebraucht wird würde ich das mit dem Windows Taskscheduler machen. Und entsprechende Zeitpläne dort ablegen die den Dienst zur gegeben Zeit rauf bzw. runter fahren.
Manuals Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 24.06.13 15:56 
Also erstmal Vielen Dank an euch. Habe mittlerweile in einem anderen Forum(myCsharp.de) die Antwort erhalten.
Und zwar war die Antwort: Aber Manuals... Wieso willst du denn das Rad neu erfinden? Nimm doch den Quartz.NET Sheduler(Open Source for Commercial Use).

Ich muss sagen das Teil ist einfach Klasse. Einfach zu Implementieren, berücksichtigt Feiertage und stellt zahlreiche Funktionen zur Verfügung.

[...deleted...]

PS @ Th69: Sorry aber ich weiß leider nicht was Crossposting ist. Ich nehme an, dass du meinst, dass das Thema bereits existiert oder dass ich an der falschen Stelle gepostet habe. Falls das der Fall ist tut es mir leid. Den Thread den du gepostet hast habe ich gelesen. Jedoch hat er meine Frage nicht beantwortet, weshalb ich dieses Thema eröffnete. Hoffe mal das ist nicht so schlimm.

Gruß Manuals

Moderiert von user profile iconTh69: 2. Frage entfernt und PN abgesetzt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4799
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 24.06.13 16:38 
Hallo Manuals,

bitte nur eine Frage pro Thema, also eröffne für die neue Frage ein neues Thema.

P.S: Und mit Crossposting ist gemeint, daß du nicht einfach so in verschiedenen Internet-Foren dieselbe Frage erstellen sollst (ohne dies explizit kenntlich zu machen und den Link zu posten). Btw.: bei myCSharp.de sind Crossposts nicht erlaubt, d.h. wenn sie dieses Thema hier entdeckt hätten, dann hätten sie deinen Beitrag sofort geschlossen.