Wecker klingelt nicht
Hi,
ich habe nun mal wieder ein etwas größeres Problem: ich bin derzeit dabei eine Art Wecker zu schreiben. Leider funktioniert das ganze nicht so, wie ich will. Der Timer(tmTimer) steht auf 1000. Im Ontimer-Ereignis:
Delphi-Quellcode:
Im OnClick des Start-Buttons (btnStart):
procedure TMainFrm.tmTimerTimer(Sender: TObject);
begin if Now = FDateTime then begin CoolTrayIcon1.ShowBalloonHint('CSD » Alarm', 'Sie wollten um diese Uhrzeit informiert werden!'+#13#10+'Es ist nun '+TimeToStr(FTime)+' Uhr!', bitInfo, 60); (* CoolTrayIcon1 ist eine Komponente für ein TrayIcon in der TNA *) tmTimer.Enabled := false; btnStart.Enabled := true; end; end;
Delphi-Quellcode:
Nun ist das Problem, dass zwar die Caption richtig gesetzt wird, allerdings zur ausgewählten Uhrzeit nichts passiert. Der Button bleibt einfach disabled.
procedure TMainFrm.btnStartClick(Sender: TObject);
begin FDate := dtpDate.Date; FTime := dtpTime.Time; FDateTime := StrToDateTime(DateToStr(FDate) + ' ' + TimeToStr(FTime)); Caption := DateTimeToStr(FDateTime); // zu Testzwecken tmTimer.Enabled := true; btnStart.Enabled := false; end; Hat dazu jemand eine Idee, warum? Wenn Bedarf besteht hänge ich gerne auchmal der kompletten Source dran... Chris |
hi,
villeicht musst du prüfen ob die weckzeit bereits erreicht bzw. überschritten ist. if now >= Weckzeit du prüfst ob die weckzeit identisch ist mit der aktuellenzeit. gruß,.. |
Hi,
eigentlich wollte ich diese Möglichkeit unterbinden, aber da es wohl doch die einzige Möglichkeit ist... Na gut. Aber es würde mich interressieren, warum das so ist... Chris |
hi nochmal,
weil es nunmal so ist :-) nein im ernst ich glaub es liegt daran das win ein multitask betriebssystem ist. deshalb kann es gut möglich sein das wenn das ereignis ausgelöst wird und du dann überprüfst wie spät es jetzt ist, die zwei werte sich schon wider unterscheiden. |
HI
Hi,
ich hatte mal ein Programm geschrieben, welches den Pc zu einer bestimmten Zeit herunterfährt, und da habe ich die aktuelle Zeit und die "Herunterfahr-Zeit" jeweils in ein Edit oder Status Feld geladen und diese dann mit "=" verglichen (also Feld.caption), und das ging ohne Probleme. allerdings hats nicht geklappt diese Zeiten beide miteinander direkt zu vergleichen! Czapie. |
Zitat:
überlege doch einmal genau was Du machst: 1. Du sagst Deinem Programm das Du z.B. um genau 12:00:00 Uhr geweckt werden möchtest. 2. Jetzt prüfst du jede Sekunde die aktuelle Uhrzeit. 3. Dein Timerevent wird eventuell aber erst um 12:00:01 ausgelöst (selbst eine Milisekunde zu spät würde reichen! Schließlich prüfst Du ja auf exakte übereinstimmung von zwei Zeiten. und eine msec nach 12 ist halt nicht genau 12 :lol: Achja:
Delphi-Quellcode:
müsste auch so gehen:
FDateTime := StrToDateTime(DateToStr(FDate) + ' ' + TimeToStr(FTime));
Delphi-Quellcode:
FDateTime := FDate + FTime;
|
Hallo Chakotay 1308
ich glaube dass die Teimerbotschaft schon pünktlich ausgelöst wird. Das Problem ist nur, das Timerbotschaften eine sehr geringe Priotrität haben. Das heißt, dass die Botschaft eine Weile in der Warteschlange steht, bevor sie abgearbeitet wird. Bis dahin ist aber schon eine gewisse Zeit vergangen. |
Zitat:
|
Wie kann man einem Ti´mer eine höhere Priorität zuweisen??
Chris |
falls du nix wirklich sehr wichtiges vor hast, ist es doch *** egal, ob der Wecker jetzt um 12:00:00,001 oder um 12:00:00,000 "hochgeht". Das dein Betriebssystem deine Anfrage innerhalb von 1ms bearbeitet kannst du wohl vergessen. Da brauchst du schon ein Realtime OS. Und auch die garantieren glaub ich nur ne Zeit von 40ms.
Also ">=" :wink: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz