[Thread][Horloge système]Réveiller un thread selon l'horloge
Bonjour à tous,
Voila, dans mon appli je crée un Thread qui doit effectuer une tache en fond entre deux heures définies par l'utilisateur.
Dans le constructeur du thread je récupère la date courante de cette maniere :
Code:
1 2 3
|
GregorianCalendar cal = new GregorianCalendar();
d = cal.getTime(); |
Ensuite voila ma méthode run() :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
public void run(){
while(true){
if(beginH<endH){
if((d.getHours()>=beginH) && (d.getHours()<endH)){
System.out.println(d.toLocaleString());
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else try {
//sleeps for 15 minutes
Thread.sleep(900000);
}catch (InterruptedException e){
System.out.println(e.getMessage());
}
}
if(beginH>endH){
if((d.getHours()>=beginH) || (d.getHours()<endH)){
System.out.println(d.toLocaleString());
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else try {
//sleeps for 15 minutes
Thread.sleep(900000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} |
Pour l'instant la tache à réaliser est un simple println suivit d'un court sleep().
Le problème est que le d.getHours() retourne toujours l'heure à laquelle l'appli a été lancé donc si l'appli est lancée en dehors de la plage de fonctionnement la tache n'est jamais réalisée et si l'appli est lancée dans la plage horaire définie par l'utilisateur alors la tache s'effectue tout le temps même lorsque l'heure de fin a été dépassée.
J'ai un peu de mal à comprendre d'où vient ce problème.
Merci :roll: