joebar3333
Messages postés41Date d'inscriptiondimanche 24 octobre 2004StatutMembreDernière intervention29 juin 2005
-
10 mai 2005 à 12:07
joebar3333
Messages postés41Date d'inscriptiondimanche 24 octobre 2004StatutMembreDernière intervention29 juin 2005
-
10 mai 2005 à 14:53
Bonjour,
après plusieurs problèmes avec les threads, j'ai voulu vérifier quelque chose de simple. Or même ce code source simple ne fonctionne pas comme je veux. Voici le source :
///////// Class main /////////
public class Main {
/** Creates a new instance of Main */
public Main() {
}
public static void main(String[] args) {
NewClass thr = new NewClass();
thr.start();
}
}
///////////Class NewClass, celle du thread ////////////
public class NewClass extends Thread{
/** Creates a new instance of NewClass */
public NewClass() {
}
public void run()
{
while(true)
{
oh();
try
{
sleep(1000);
}
catch(InterruptedException e)
{
System.out.println("erreur thread update " + e);
}
}
}
public void oh()
{
Timestamp t3 = new Timestamp(0);
t3.setTime(System.currentTimeMillis());
System.out.println("update graphik " + t3.toString());
}
}
Ce que je veux faire est simple. Je veux que toutes les secondes, le thread m'affiche l'heure courante avec la fonction oh(). Le problème est qu'à l'exécution de ce prog, il se cré un décalage. La fonction oh() affiche :
12:08:18.117
12:08:19.118
12:08:20.119
Bref il se cré un décalage de 1 millisec toutes les secondes. Cette différence est très faible mais très importante pour moi. Pouvez-vous me corriger mon source pour qu'il m'affiche :
12:08:18.117
12:08:19.117
12:08:20.117
cs_Dobel
Messages postés333Date d'inscriptiondimanche 25 mai 2003StatutMembreDernière intervention23 novembre 20091 10 mai 2005 à 13:46
Pour préciser un peu,
Dans l'exemple au dessus, on triche évidemment en affichant une heure
qui est calculée en rajoutant n*1000 à une valeur d'origine.
Mais ce qui est important, c'est que l'affichage est déclencher de
façon très régulière (+- 1ms dans mon test), avec des écarts qui ne se
propagent pas.
On peut donc aussi moins tricher, en affichant l'heure réelle. Mais le résultat est moins beau !
-----
Dobel
[Une fois rien, c'est rien; deux fois
rien, ce n'est pas beaucoup, mais pour trois fois rien, on peut déjà
s'acheter quelque chose, et pour pas cher]
bjdc
Messages postés16Date d'inscriptionsamedi 7 mai 2005StatutMembreDernière intervention18 mai 2005 10 mai 2005 à 13:09
Ton code n'est s'execute ni de facon instantanée, ni prioriairement sur les autres process, ce qui peut expliquer le decalage.
Pour le deuxieme probleme, tu peux toujours tenter un setPriority(MAX_PROPRITY)
Pour le premier, y'a pas de solution simple. Si tu arrives a calculer
le temps d'execution, tu peux ajuster la duree du sleep, mais ca
va dependre de la machine sur laquelle le code tourne...
Dobel
[Une fois rien, c'est rien; deux fois rien,
ce n'est pas beaucoup, mais pour trois fois rien, on peut déjà
s'acheter quelque chose, et pour pas cher]
joebar3333
Messages postés41Date d'inscriptiondimanche 24 octobre 2004StatutMembreDernière intervention29 juin 2005 10 mai 2005 à 14:06
Salut Dobel,
merci pour tes réponses précises et rapides. Ca marche ! Réponse acceptée sans pb.
J'en profite de tes compétences pour te diriger vers un de mes posts que je n'ai toujours pas pu résoudre : http://www.javafr.com/forum.v2.aspx?ID=450878
Si toutefois t'avais une idée, ça serait génial.
Merci encore.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Dobel
Messages postés333Date d'inscriptiondimanche 25 mai 2003StatutMembreDernière intervention23 novembre 20091 10 mai 2005 à 14:39
lol, c'est juste que j'ai constaté que ça allait être mon 201ème
message, donc je voulais poster quelque chose de pas trop con :D
Dobel
[Une
fois rien, c'est rien; deux fois rien, ce n'est pas beaucoup, mais pour
trois fois rien, on peut déjà s'acheter quelque chose, et pour pas cher]