Autor Beitrag
Aurum
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 16.03.09 20:05 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 591
Erhaltene Danke: 14



BeitragVerfasst: Mo 16.03.09 22:28 
user profile iconAurum hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mo 16.03.09 22:29 
user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:
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...: www.delphi-library.d...&highlight=delay

Was genau das tut, steht im Beitrag, ob's besser ist als ein Timer ... :nixweiss:

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Aurum Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 16.03.09 23:18 
Danke für eure Tipps. Ich werde weiterhin alle Sekunde pollen.

Gruss

Aurum
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 17.03.09 09:42 
user profile iconAurum hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Di 17.03.09 18:08 
user profile iconhathor hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconAurum hat folgendes geschrieben Zum zitierten Posting springen:
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 geweckt 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 141

W7
D2010, XE2
BeitragVerfasst: Mi 18.03.09 09:31 
Man kann die Invervallzeit auch dynamisch verändern.
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Mi 18.03.09 19:29 
user profile iconsky21 hat folgendes geschrieben Zum zitierten Posting springen:
Man kann die Invervallzeit auch dynamisch verändern.

Und wo liegt jetzt genau der Unterschied? :gruebel:
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: 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=www.delphi-forum.de/...highlight=tageszeit]
gemacht wird, und den Wert als Timer-Intervall angeben.
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Mi 18.03.09 23:52 
user profile iconffgorcky hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Do 19.03.09 08:38 
ausblenden 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 // Aufsteeeehen!
    BimmelDiBimm
  Else Begin
// Interval auf Weckzeit-Jetzt-EineSekunde setzen (oder 1 Sekunde, wenn es gleich soweit ist)
    Wecker.Interval := Max(Trunc (((WeckZeit-Now)*86400-1)*1000),1000);
// Timer wieder anschalten
    Wecker.Enabled := True;
  End
End;

Vorsicht, mit diesem Wecker kann man nicht mehr als 25 Tage lang schlafen! :P

_________________
Na denn, dann. Bis dann, denn.