"Wecker" programmieren

Status
Nicht offen für weitere Antworten.
hallo zusammen
ich möchte mir einen kleinen desktop kalender programmieren, dazu brauche ich eine funktion, die irgendetwas tut ( fenster öffnen, sound abspielen ... was auch immer), wenn ein bestimmtes datum und zeitpunkt erreciht ist. die möglichkeit alle x sekunden die systemzeit abzufragen und zu vergleichen ist nicht sonderlich elegant, daher wollte ich mal fragen ob irgendwer eine möglichkeit kennt, wie man den event auslösen könnte.
 

Illuvatar

Top Contributor
Ich kenne sonst keine Möglichkeit. Aber wenn du das, sagen wir, einmal pro Sekunde machst, ist das zumindest für die CPU ja keine weitere Belastung. "Schön" ist es vielleicht nicht, aber wenns sonst nix gibt... ;)
 
eben auf diese weise funktionierts schon. und nach einem ersten testdurchlauf scheints die cpu wirklich nicht allzu arg in mitleidenschaft zu ziehen. nur kann ich mir nicht vorstellen, dass es für diesen fall keinen listener observer oder was auch immer geben soll...
 

L-ectron-X

Gesperrter Benutzer
Du kannst auch einmal die Differenz zum nächsten Event bestimmen und den Thread dann so lange pausieren lassen.
Wenn ein weiteres Event in die Liste eingefügt wird, muss wieder die Differenz bis zum nächsten Ereignis bestimmt werden. usw.
So gehst du ganz sicher, dass die CPU nicht unnötig beschäftigt wird.
 

Leroy42

Top Contributor
Warum ziehst du nicht einfach einen Timer auf?

Der macht im Hintergrund wahrscheinlich auch nichts anderes, aber sieht zumindest eleganter aus. :)
 

Illuvatar

Top Contributor
L-ectron-X hat gesagt.:
Du kannst auch einmal die Differenz zum nächsten Event bestimmen und den Thread dann so lange pausieren lassen.
Wenn ein weiteres Event in die Liste eingefügt wird, muss wieder die Differenz bis zum nächsten Ereignis bestimmt werden. usw.
So gehst du ganz sicher, dass die CPU nicht unnötig beschäftigt wird.

Das Problem ist dabei nur vielleicht, dass Thread.sleep äußerst ungenau arbeitet.
 

Leroy42

Top Contributor
Illuvatar hat gesagt.:
...dass Thread.sleep äußerst ungenau arbeitet.
Was heißt ungenau? In welcher Größenordnung?
Ich kann mir nicht vorstellen, daß die Ungenauigkeit mehr als ein paar Sekunden betragen kann;
das hängt natürlich von der Implementierung der Methode ab.

Und auch wenn, für einen Wecker sollte die Genauigkeit doch allemal reichen!?
 

Murray

Top Contributor
Leroy42 hat gesagt.:
Illuvatar hat gesagt.:
...dass Thread.sleep äußerst ungenau arbeitet.
Was heißt ungenau? In welcher Größenordnung?
Ich kann mir nicht vorstellen, daß die Ungenauigkeit mehr als ein paar Sekunden betragen kann;
das hängt natürlich von der Implementierung der Methode ab.

Und auch wenn, für einen Wecker sollte die Genauigkeit doch allemal reichen!?

Man darf halt nicht zulassen, dass sich eventuelle Ungenauigkeiten kumulieren, so in der Form:
Code:
int sek = 0;
int min = 0;
int std = 0;

while ( true) {
  Thread.sleep( 1000);
   sek++;
  if ( sek >= 60) {
     min++;
     sek = 0;
     if ( min >= 60) {
       std++;
       min = 0;
     }
  }
}

So eine Uhr würde wohl tatsächlich nicht besonders genau gehen; man darf sleep() nur verwenden, um in mehr oder weniger regelmässigen Abständen z.B. per System.currentTimeMillis() die dann jeweils aktuelle Zeit abzufragen.

Aber diese Schwierigkeiten kapselt java.util.Timer ja ganz gut.
 
danke vielmals für die antworten. ich denke die idee von murray mit java.util.timer scheint genau das zu sein, wonach ich suche. falls jemand einen kleinen desktopkalender braucht, nur melden dem projekt scheint ja jetzt nichts mehr im weg zu stehen ;-)
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben