Entwickler-Ecke
Sonstiges (Delphi) - Muss man die Zeit z.B. für einen Wecker pollen?
Aurum - Mo 16.03.09 20:05
Titel: Muss man die Zeit z.B. für einen Wecker pollen?
Hallo Leute
Wenn ich einen Wecker mache der z.B. um 07:50 Uhr Alarm gibt, wie muss ich dies machen?
Muss ich einen TTimer verwenden der jede Sekunde prüft ob es jetzt 07:50 ist und wenn es zutrift dann schlage ich Alarm?
Oder gibt es eine elegantere Lösung?
Gruss
Aurum
Yogu - Mo 16.03.09 20:09
Du könntest die Differenz zwischen der aktuellen Zeit und der gewünschten Weckzeit berechnen und diese dem Timer zuweisen. Da der aber sehr ungenau arbeitet, würde ich erst etwas von der Zeit abziehen, und im Timer-Event noch so lange warten, bis auch wirklich der Wecker klingeln soll. (ggf. einfach den Intervall des Timers auf 1000 setzen).
Reinhard Kern - Mo 16.03.09 22:28
Aurum hat folgendes geschrieben : |
Hallo Leute
Wenn ich einen Wecker mache der z.B. um 07:50 Uhr Alarm gibt, wie muss ich dies machen?
Muss ich einen TTimer verwenden der jede Sekunde prüft ob es jetzt 07:50 ist und wenn es zutrift dann schlage ich Alarm?
Oder gibt es eine elegantere Lösung?
Gruss
Aurum |
Hi,
du kannst den Scheduler des Betriebssystems beauftragen (linux cron, Windows at), aber der macht ja auch nichts anderes. Ausserdem, wie schon vorgeschlagen, kannst du ein längeres Intervall nehmen, wenn der Zeitpunkt noch entfernt ist, aber ein Event/Sekunde fällt kaum ins Gewicht, daher lohnt sich das nicht wirklich. Wenn du mit einem Abfrageintervall von 1 bis 10 Sekunden hinkommst, würde ich es beim Polling belassen.
Gruss Reinhard
JayEff - Mo 16.03.09 22:29
Yogu hat folgendes geschrieben : |
| Du könntest die Differenz zwischen der aktuellen Zeit und der gewünschten Weckzeit berechnen und diese dem Timer zuweisen. Da der aber sehr ungenau arbeitet |
Meines wissens arbeitet der nur bei der kleinen Intervallen ungenau, jaenicke hat glaube ich den Test gemacht und ist auf Ungenauigkeit ab 15 ms abwärts gekommen.
Eine Möglichkeit steht in den FAQ...:
http://www.delphi-library.de/viewtopic.php?t=23225&highlight=delay
Was genau das tut, steht im Beitrag, ob's besser ist als ein Timer ... :nixweiss:
Aurum - Mo 16.03.09 23:18
Danke für eure Tipps. Ich werde weiterhin alle Sekunde pollen.
Gruss
Aurum
Delete - Di 17.03.09 09:42
Aurum hat folgendes geschrieben : |
Danke für eure Tipps. Ich werde weiterhin alle Sekunde pollen.
Gruss
Aurum |
Wenn nur HH:MM interessieren, macht es keinen Sinn, jede Sekunde zu pollen, es reicht dann, 1x/Minute die Zeit zu vergleichen.
Yogu - Di 17.03.09 18:08
hathor hat folgendes geschrieben : |
Aurum hat folgendes geschrieben : | Danke für eure Tipps. Ich werde weiterhin alle Sekunde pollen.
Gruss
Aurum |
Wenn nur HH:MM interessieren, macht es keinen Sinn, jede Sekunde zu pollen, es reicht dann, 1x/Minute die Zeit zu vergleichen. |
Es macht in sofern Sinn, dass der User vielleicht auf die Sekunde genau um diese Uhrzeit ge
weckt werden will. Ich denke, ein normaler "Aufsteh"-Wecker (;)) macht am PC wenig Sinn, also wird es wohl eher etwas anderes sein. Und da kommt es manchmal schon auf die Sekunde an.
Deshalb mein Tipp: Etwa eine Minute vorher das Intervall hinuntersetzten. Dass ist gesichert, dass die Genauigkeit stimmt.
sky21 - Mi 18.03.09 09:31
Man kann die Invervallzeit auch dynamisch verändern.
Yogu - Mi 18.03.09 19:29
sky21 hat folgendes geschrieben : |
| Man kann die Invervallzeit auch dynamisch verändern. |
Und wo liegt jetzt genau der Unterschied? :gruebel:
ffgorcky - Mi 18.03.09 22:11
Also wenn es wirklich nur darum geht, möglichst wenige Timer-Abfragen für die Behandlung _eines_ konkreten Termins zu nutzen, dann könnte man ja errechnen, wie lange es noch bis zu dem Termin dauert und davon die Hälfte als Timer-Intervall angeben.
Dafür müsste man aber bei jeder Timer-Abfrage diese Errechnung wieder neu durchführen.
Oder man könnte ja auch direkt den MS-Abstand zum Termin berechnen mit dem, wie es in Thema
[Link="2 Fragen (Datum, Ereignis das immer auftrit)" URL=
http://www.delphi-forum.de/viewtopic.php?t=72893&start=0&postorder=asc&highlight=tageszeit]
gemacht wird, und den Wert als Timer-Intervall angeben.
Boldar - Mi 18.03.09 23:52
ffgorcky hat folgendes geschrieben : |
Also wenn es wirklich nur darum geht, möglichst wenige Timer-Abfragen für die Behandlung _eines_ konkreten Termins zu nutzen, dann könnte man ja errechnen, wie lange es noch bis zu dem Termin dauert und davon die Hälfte als Timer-Intervall angeben.
Dafür müsste man aber bei jeder Timer-Abfrage diese Errechnung wieder neu durchführen.
|
Dann würde das ereignis aber nie eintreten^^
alzaimar - Do 19.03.09 08:38
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| Procedure TWeckerForm.WeckerOnTimer (Sender : TObject); Begin Wecker.Enabled := False If Now>WeckZeit Then BimmelDiBimm Else Begin Wecker.Interval := Max(Trunc (((WeckZeit-Now)*86400-1)*1000),1000); Wecker.Enabled := True; End End; |
Vorsicht, mit diesem Wecker kann man nicht mehr als 25 Tage lang schlafen! :P
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!