Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1447 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Sleep dans les thread java

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Sleep dans les thread java

n°1233028
pdufranc
Posté le 27-10-2005 à 22:30:36  profilanswer
 

Bonjour
Je viens de faire des tests sur la precisions d'un sleep java et c'est pas bon, c'est à dire un sleep de 2 ms fait 16 ms
Qu'est ce que je peux utiliser comme timer pour avoir un sleep plus precis
Merci d'avance


---------------
"Placez votre main sur un poele une minute et ça vous semble durer une heure. Asseyez vous aupres d'une jolie fille une heure et ça vous semble durer une minute. C'est ça la relativite." (Albert Einstein / 1879-1955)
mood
Publicité
Posté le 27-10-2005 à 22:30:36  profilanswer
 

n°1233092
bartleby
Posté le 27-10-2005 à 23:25:16  profilanswer
 

pdufranc a écrit :

Bonjour
Je viens de faire des tests sur la precisions d'un sleep java et c'est pas bon, c'est à dire un sleep de 2 ms fait 16 ms
Qu'est ce que je peux utiliser comme timer pour avoir un sleep plus precis
Merci d'avance


 
Tu peux nous dire comment tu as teste ?

n°1233103
pdufranc
Posté le 28-10-2005 à 00:06:36  profilanswer
 

J'ai une appli qui tourne avec plusieurs threads et sur un apres ces instructions; je recupere le temps avant le sleep et celui apres et je calcul la différence

n°1233170
nerisson
Pic-pic
Posté le 28-10-2005 à 09:16:48  profilanswer
 

pdufranc a écrit :

Bonjour
Je viens de faire des tests sur la precisions d'un sleep java et c'est pas bon, c'est à dire un sleep de 2 ms fait 16 ms
Qu'est ce que je peux utiliser comme timer pour avoir un sleep plus precis
Merci d'avance


Si tu veux de la précision à la milliseconde près ca va être chaud en Java, surtout si tu fait du multi-threading


---------------
Light is right
n°1233187
souk
Tourist
Posté le 28-10-2005 à 09:51:23  profilanswer
 

je serais curieux de voir le code [:pingouino]

n°1234179
post_it
Hmmmm!...
Posté le 29-10-2005 à 18:22:10  profilanswer
 

Désolé pdufranc, mais le java ne fait pas du temps-réel, et la fonction sleep te garantit simplement que le sleep fera au moins 2ms, rien de plus.

n°1236530
wapcamer
Posté le 02-11-2005 à 15:36:17  profilanswer
 

post_it a écrit :

Désolé pdufranc, mais le java ne fait pas du temps-réel, et la fonction sleep te garantit simplement que le sleep fera au moins 2ms, rien de plus.


 
Une technique que tu peux utiliser, c'est de sauvegarder la date au début de ton process.
Quand tu arrives à la fin, tu regardes si le temps écoulé est inférieur à la période que tu as fixée ( rafraichissemnt des frames par exemple) Si c'est le cas, tu px fair un sleep de la différence, autrement si on a dépassé le temps, pas de sleep, et on recommence.
 
De cette façon, qd les threads sont plus courts, on attend, et qd ils sont plus lents, on tolère ce dépassement.
 
Sinon fais bien attention aux instructions que tu places entre tes deux relevés de date, tu dois avoir le minimum pour être sur de mesurer le Sleep() le + précisément possible.


---------------
Voir les RAW sous Android: https://market.android.com/details? [...] .RawVision Blog Photo: http://photouch.me Applications mobiles: http://caketuzz.com Wapcam Project: http://wapcam.mobi
n°1236707
pdufranc
Posté le 02-11-2005 à 17:45:24  profilanswer
 

wapcamer :  
C'est ce que je fais deja. Et quand je mesure par ce procede le temps mis par le Sleep, il est tres souvent supérieur au temps demandé.
;)


---------------
"Placez votre main sur un poele une minute et ça vous semble durer une heure. Asseyez vous aupres d'une jolie fille une heure et ça vous semble durer une minute. C'est ça la relativite." (Albert Einstein / 1879-1955)
n°1236732
wapcamer
Posté le 02-11-2005 à 18:16:29  profilanswer
 

pdufranc a écrit :

wapcamer :  
C'est ce que je fais deja. Et quand je mesure par ce procede le temps mis par le Sleep, il est tres souvent supérieur au temps demandé.
;)


 
Il y a 2 choses à voir: la durée de chaque cycle, et la durée du Thread.Sleep()
 
Je te conseille donc de faire un System.out a l'entrée de chaque boucle, et d'encadrer ton Sleep par 2 appels à getDate();
De cette façon, tu pourras avoir la durée du sleep et la durée recommandée pour le sleep.
 
 DateD0           Traitement         DateD1      Sleep       DateD2  T1= Fin de la boucle
.|------------------------------>---------->--------->-------|
 
Un bon shéma.....
Ainsi avec D°, D1, D2, tu peux deja verifier que D0+Sleep = T1 à peu près
et que D2-D1= Sleep
 
Si ce n'est pas le cas, il faut traiter les choses staitistiquement:
soit tu fais un grand nombre d'essais et à partir de là, tu essayes d'extrapoler une loi sur la durée du Sleep par rapport à la valeur qui est entrée, de cette façon tu pourras corriger la valeur d'entrée de la fonction sleep() en fonction de la valeur que tu espères.
Mais bon à mon avis, ça ne donnera pas gdchose mais au moins ça te permettra de voir sile delai du Sleep est aléatoire ou pas.
 
 
Tiens une autre idée qui me vient comme ça, si tu remplaces ton Sleep(durée) par une boucle de Sleeps, par exemple, au lieu de  
Thread.Sleep(maDuree);
 

Code :
  1. date1=System.getDate(); //Oui je sais je connais plus le nom de la méthode
  2. while(System.getDate() - date1 <maDuree)
  3. {
  4.      try{Thread.Sleep(1);}catch(){}
  5. }


Le pb c que sur des durées de l'ordre de la ms, je sais pas si ca peut aider.
 
Tiens nous au courant


---------------
Voir les RAW sous Android: https://market.android.com/details? [...] .RawVision Blog Photo: http://photouch.me Applications mobiles: http://caketuzz.com Wapcam Project: http://wapcam.mobi
n°1236737
sircam
I Like Trains
Posté le 02-11-2005 à 18:22:54  profilanswer
 

Thread.sleep(1) => autant faire un busy wait, tant qu'on y est. [:pingouino]
 
Mesurer le temps qu'a mis le sleep sur des petites valeurs : hot hot hot.
 
Essayer d'en déduire le temps qu'il reste à attendre ou le dépassement : ça devient carrément olé. Le temps de prendre la mesure ET de faire une comparaison, et une valise de ms se sont presque écoulées...
 
Je suis plus que sceptique.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
mood
Publicité
Posté le 02-11-2005 à 18:22:54  profilanswer
 

n°1236924
wapcamer
Posté le 02-11-2005 à 21:34:49  profilanswer
 

sircam a écrit :

Thread.sleep(1) => autant faire un busy wait, tant qu'on y est. [:pingouino]
 
Mesurer le temps qu'a mis le sleep sur des petites valeurs : hot hot hot.
 
Essayer d'en déduire le temps qu'il reste à attendre ou le dépassement : ça devient carrément olé. Le temps de prendre la mesure ET de faire une comparaison, et une valise de ms se sont presque écoulées...
 
Je suis plus que sceptique.


 
 
hey, c pas pour mesurer le sleep sur de petites valeurs, c juste pour approcher la fin de la période du cycle sans trop d'écart.
Prendre la mesure ne doit pas être tellement long, c juste une copie de registre, pareil pour le calcul mathématique dc je suis pas sur qu'on n'ait pas une résolution à 2ms. En fait ça doit ss doute dépendre aussi de la charge CPU.
 
Essayer est encore la meilleure façon de s'en rendre compte.
 
Et toi que proposes-tu?


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Sleep dans les thread java

 

Sujets relatifs
[java] Assistant de création graphique[java] Recherche un "FileSelectPopup"
traitement d'images avec javaCreer un executable complet pour ses applications Java ?
utiliser qt avec javaProbleme de <Input> avec du JAVA
Pour se mettre à Javaafficher le resultat trouver en C sur du JAVA (JNI)
plus de Java que de .Net[java] thread et sleep en ns
Plus de sujets relatifs à : Sleep dans les thread java


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR