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

  FORUM HardWare.fr
  Programmation
  Java

  [java] thread et sleep en ns

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

[java] thread et sleep en ns

n°669928
manu025
Posté le 10-03-2004 à 17:23:14  profilanswer
 

Salut !
 
Je travaille sur des applications de routage actif en java et pour faire des pauses j'utilise la méthode sleep() de Thread. D'après la doc java, on peux faire des pauses à la nanoseconde. D'après mes tests ce temps de pause est completement irréaliste vu qu'un sleep(0,1) (d'une nanoseconde) dure au moins 3 voire 5 milisecondes.
Avez-vous déjà essayé ces sleep à la nanoseconde ? Qu'en pensez vous ?
 
Merci d'avance.


---------------
-@- When code matters more than commercials -@-
mood
Publicité
Posté le 10-03-2004 à 17:23:14  profilanswer
 

n°669931
ixemul
Nan mais sans blague ! ⚡
Posté le 10-03-2004 à 17:26:47  profilanswer
 

manu025 a écrit :

Salut !
 
Je travaille sur des applications de routage actif en java et pour faire des pauses j'utilise la méthode sleep() de Thread. D'après la doc java, on peux faire des pauses à la nanoseconde. D'après mes tests ce temps de pause est completement irréaliste vu qu'un sleep(0,1) (d'une nanoseconde) dure au moins 3 voire 5 milisecondes.
Avez-vous déjà essayé ces sleep à la nanoseconde ? Qu'en pensez vous ?
 
Merci d'avance.


 
du ns en java je trouve cela difficilement realisable, enfin, je peux me tromper ;)

n°669932
benou
Posté le 10-03-2004 à 17:29:39  profilanswer
 

c'est pas une source officielle, mais ca me parat logique :  
http://www.talkaboutprogramming.co [...] 16031.html


---------------
ma vie, mon oeuvre - HomePlayer
n°669934
Taz
bisounours-codeur
Posté le 10-03-2004 à 17:32:23  profilanswer
 

ça dépend aussi du système sous-jacent.
 
tu veux pas faire un yield plutot ?

n°669935
benou
Posté le 10-03-2004 à 17:34:31  profilanswer
 

Taz a écrit :


tu veux pas faire un yield plutot ?


ca a pas du tout le même usage ... yield rend la main, sleep fait une pause


---------------
ma vie, mon oeuvre - HomePlayer
n°669959
Taz
bisounours-codeur
Posté le 10-03-2004 à 18:00:00  profilanswer
 

certes, mais tu crois qu'il se passe quoi quand on fais un sleep ? moi je vois bien un autre thread prendre la main. je n'ai rien testé, mais peut être que yield est la manière la plus rapide de faire une petite pause.

n°669966
benou
Posté le 10-03-2004 à 18:08:00  profilanswer
 

Taz a écrit :

je n'ai rien testé, mais peut être que yield est la manière la plus rapide de faire une petite pause.


c'est détourner l'utilisation du yield [:skeye]
 
dans ce cas, y a qu'à faire un for (int i=0;i<100; i++){}, ca fait une petite pause aussi [:kiki]


---------------
ma vie, mon oeuvre - HomePlayer
n°669976
Taz
bisounours-codeur
Posté le 10-03-2004 à 18:16:29  profilanswer
 

faudrait faire un essai, mais pourquoi pas  
 
juste avec un petit test, une boucle avec 1000 Thread.sleep(1) prends 22000ms chez moi et 1000 Thread.yield() prend 10000ms

n°669983
benou
Posté le 10-03-2004 à 18:31:49  profilanswer
 

Taz a écrit :

faudrait faire un essai, mais pourquoi pas


parce que c'est n'importe quoi ?
parce que dans 10 ans ta pause durera 100 fois moins longtemps ?


Message édité par benou le 10-03-2004 à 18:32:02

---------------
ma vie, mon oeuvre - HomePlayer
n°669987
Taz
bisounours-codeur
Posté le 10-03-2004 à 18:34:23  profilanswer
 

non. parce que c'est la seule façon que j'ai trouvé de faire une pause aussi courte que possible.

mood
Publicité
Posté le 10-03-2004 à 18:34:23  profilanswer
 

n°670094
manu025
Posté le 10-03-2004 à 20:06:56  profilanswer
 

Ouais c'est donc bien bidon la pause de 1ns, ils sont un peu arrangés chez Sun quand même...
Pour le coup du yield j'y avais pensé, le seul pb c'est que dans le programme que j'utilise, la classe Thread est overloadée et ya plus de yield :/ D'ailleurs je me demande comment ils ont bien pu faire ça.
Et la boule ça ne va pas car ça boufferait tout le cpu et les autres threads ne pourraient pas s'exécuter correctement.


---------------
-@- When code matters more than commercials -@-
n°670097
Taz
bisounours-codeur
Posté le 10-03-2004 à 20:09:29  profilanswer
 

je comprends pas là...

n°670184
manu025
Posté le 10-03-2004 à 21:02:07  profilanswer
 

de quoi ?

n°670207
Taz
bisounours-codeur
Posté le 10-03-2004 à 21:13:48  profilanswer
 

comment cai possible

n°670246
benou
Posté le 10-03-2004 à 21:31:11  profilanswer
 

Taz a écrit :

comment cai possible


Code :
  1. public class ThreadALaCon extends Thread {
  2.    public void yield() {
  3.       System.out.println("dtc" );
  4.    }
  5. }


[:spamafote]

n°670249
benou
Posté le 10-03-2004 à 21:32:25  profilanswer
 

manu025 a écrit :

Ouais c'est donc bien bidon la pause de 1ns


dans le cas où l'OS sous jacent est capable de le gérer, ca va marcher ...
 
Sun a rien à voir la dedans ... c'est l'OS qui est pas capable ...

n°670261
SquiZZ
Posté le 10-03-2004 à 21:36:33  profilanswer
 

benou a écrit :


Code :
  1. public class ThreadALaCon extends Thread {
  2.    public void yield() {
  3.       System.out.println("dtc" );
  4.    }
  5. }


[:spamafote]


 
 

Code :
  1. public class ThreadEncorePlusALaCon extends ThreadALaCon {
  2.    public void yield() {
  3.       super.super.yield();
  4.    }
  5. }


 [:fez666]  
 
 

n°670263
Taz
bisounours-codeur
Posté le 10-03-2004 à 21:37:10  profilanswer
 

benou a écrit :


Code :
  1. public class ThreadALaCon extends Thread {
  2.    public void yield() {
  3.       System.out.println("dtc" );
  4.    }
  5. }


[:spamafote]

et dans ce cas c'est pas possible de faire un Thread.yield() ?

n°670266
Taz
bisounours-codeur
Posté le 10-03-2004 à 21:38:12  profilanswer
 

benou a écrit :


dans le cas où l'OS sous jacent est capable de le gérer, ca va marcher ...
 
Sun a rien à voir la dedans ... c'est l'OS qui est pas capable ...

sur ? faudrait pouvoir voir comment la machine de Sun ordonnance ses threads

n°670268
benou
Posté le 10-03-2004 à 21:38:29  profilanswer
 

SquiZZ a écrit :


Code :
  1. public class ThreadEncorePlusALaCon extends ThreadALaCon {
  2.    public void yield() {
  3.       super.super.yield();
  4.    }
  5. }


 [:fez666]  


tu peux pas faire super.super [:spamafote]

n°670271
SquiZZ
Posté le 10-03-2004 à 21:39:36  profilanswer
 

benou a écrit :


tu peux pas faire super.super [:spamafote]


 
c'était juste au cas ou, super c'est un des seuls trucs dont je me rappelle en java  [:shinji_kun64]

n°670272
Taz
bisounours-codeur
Posté le 10-03-2004 à 21:40:09  profilanswer
 

mais ((Thread)this).yield() :D

n°670305
benou
Posté le 10-03-2004 à 21:54:12  profilanswer
 

Taz a écrit :

mais ((Thread)this).yield() :D


jolie StackOverflowError :jap:

n°670310
benou
Posté le 10-03-2004 à 21:56:03  profilanswer
 

SquiZZ a écrit :


c'était juste au cas ou, super c'est un des seuls trucs dont je me rappelle en java  [:shinji_kun64]  


en java y a pas moyen de squizzer (:)) l'implémentation parente d'une classe pour remonter à l'implémentation "grand-parente" [:spamafote]

n°670312
Taz
bisounours-codeur
Posté le 10-03-2004 à 21:56:15  profilanswer
 

tu peux m'expliquer ? et me dire pourquoi le Thread.yield() ne marcherait pas ?

n°670320
benou
Posté le 10-03-2004 à 21:58:25  profilanswer
 

Taz a écrit :

tu peux m'expliquer ? et me dire pourquoi le Thread.yield() ne marcherait pas ?


[:gratgrat]
 
oups ... t'as raison, j'avais oublié que le yield était static  :whistle:  
 
quel con [:ddr555]

n°670364
SquiZZ
Posté le 10-03-2004 à 22:18:01  profilanswer
 

je dois être bête mais je vois pas du tout en quoi le fait que cette méthode soit static change quelque chose dans l'histoire.
Le code de taz marche très bien en C++, peux tu m'expliquer pourquoi il ne marcherait pas en java et dans ce cas quel est l'effet magique du static ?
 
 
 
> benou :  [:aloy] jeu de mots !  [:ddr555]  

n°670369
benou
Posté le 10-03-2004 à 22:25:39  profilanswer
 

ben c'est juste que c'est une méthode de classe, pas d'instance, donc elle est toujours accessible de n'importe où : tu peux pas la surcharger. Le code de Taz par contre ne marche pas dans le cas où tu redéfinies une méthodes statique yield parce qu'il passe par this pour l'appeler.  
C'est possible d'appeler une méthode static comme une méthode de normal (this.laMethode), mais dans ce cas, ce sera la 1ere méthode de ce nom (dans l'arborescence d'héritage des classes) qui sera appelée.
 
=> ((Thread) this).yield() -> ca revient au même que this.yield(). D'ailleur, si c'est à l'intérieur de yield que tu fais ca ca compile pas puisque yield est static => pas de this
=> Thread.yield -> ca marche

n°670395
manu025
Posté le 10-03-2004 à 23:01:25  profilanswer
 

Je vais regarder plus en détail le code de l'appli en question et je vous redirais. En tout cas le Thread.yield() ne marche pas.

n°670397
Taz
bisounours-codeur
Posté le 10-03-2004 à 23:03:19  profilanswer
 

bizzare ça :/

n°670402
benou
Posté le 10-03-2004 à 23:11:26  profilanswer
 

manu025 a écrit :

En tout cas le Thread.yield() ne marche pas.


qu'est ce qui te fait dire ca ?

n°670404
nraynaud
lol
Posté le 10-03-2004 à 23:12:55  profilanswer
 

Taz a écrit :

mais ((Thread)this).yield() :D

http://supergrass.densitron.net/diary4/paris/sortie.JPG


---------------
trainoo.com, c'est fini
n°670413
SquiZZ
Posté le 10-03-2004 à 23:27:10  profilanswer
 

donc si j'ai bien tout compris, on ne peut transtyper que des types de base et pas des objets ?
 

n°670419
benou
Posté le 10-03-2004 à 23:29:14  profilanswer
 

SquiZZ a écrit :

donc si j'ai bien tout compris, on ne peut transtyper que des types de base et pas des objets ?


 :heink:  
 
absolument rien à voir

n°670449
SquiZZ
Posté le 10-03-2004 à 23:57:44  profilanswer
 

ok, je comprendrais jamais rien à java.
 
Quand je caste un truc, je m'attends a retrouver un objet casté de l'autre côté et pas une référence sur l'instance d'objet non castée. (enfin c'est comme ca que j'interprète ce qui se passe, je dois me planter complètement).
 
avec une classe de base CBaseClass et une classe dérivée CDerivedClass
 
si je fais  

Code :
  1. CDerivedClass d = new CDerivedClass();
  2. CBaseClass b = (CBaseClass)d;


 
quand j'appelle une méthode de b, j'aimerais bien appeler des méthodes de la classe CBaseClass.
Sinon je vois pas trop a quoi ca sert de caster, et donc pourquoi cette syntaxe est acceptée par un compilo.
 
 
edit :
si je fais  

Code :
  1. float toto = 5.6f;
  2. int titi = (int)toto;


 
j'espère que me retrouve pas avec un entier qui vaut 5.6


Message édité par SquiZZ le 11-03-2004 à 00:06:48
n°670511
benou
Posté le 11-03-2004 à 08:55:58  profilanswer
 

un cast sur des types primitifs et sur des objets, déjà c'est pas pareil. Sur des types primitifs c'est une conversion... Sur des objets c'est juste une indication au compilateur.
 
 

SquiZZ a écrit :

si je fais  

Code :
  1. CDerivedClass d = new CDerivedClass();
  2. CBaseClass b = (CBaseClass)d;


 
quand j'appelle une méthode de b, j'aimerais bien appeler des méthodes de la classe CBaseClass.


ben effectuvement t'as rien compris : c'est contraire au polymorphisme ce que tu dis ... peut importe la déclaration du type d'un objet : quand tu appelles une émthode dessus, c'est la méthode du type REEL de l'instance de l'objet qui sera appelée ...
 
et ton cast dans ton exemple au dessus il sert à rien : tu pourrais ne pas le mettre ca ferait pareil

n°670515
SquiZZ
Posté le 11-03-2004 à 09:12:53  profilanswer
 

benou a écrit :

un cast sur des types primitifs et sur des objets, déjà c'est pas pareil.  


c'est ce que je disais qques messages avant et tu m'a fait  :heink:  
 

benou a écrit :


ben effectuvement t'as rien compris : c'est contraire au polymorphisme ce que tu dis ... peut importe la déclaration du type d'un objet : quand tu appelles une émthode dessus, c'est la méthode du type REEL de l'instance de l'objet qui sera appelée ...


du polymorphisme j'en fait tous les jours en C++.
seulement en C++ quand je dis à mon gentil compilo de caster, il caste.
c'est pas forcément propre au niveau OO mais ca peut servir de temps en temps.
Un genre de super en mieux (ou moins bien ca dépend de quel côté on se place)
donc le super de java est contraire au polymorphisme ?
 

benou a écrit :


et ton cast dans ton exemple au dessus il sert à rien : tu pourrais ne pas le mettre ca ferait pareil


 
Je sais aussi que mon cast ne sert a rien, c'était juste pour montrer au lecteur que je veux caster.
Je repose ma question : à quoi ca sert d'avoir l'opérateur de cast sur les objets dans un langage si il ne sert a rien ?


Message édité par SquiZZ le 11-03-2004 à 09:13:43
n°670517
Taz
bisounours-codeur
Posté le 11-03-2004 à 09:23:11  profilanswer
 

SquiZZ a écrit :


c'est ce que je disais qques messages avant et tu m'a fait  :heink:  
 
 
du polymorphisme j'en fait tous les jours en C++.
seulement en C++ quand je dis à mon gentil compilo de caster, il caste.

on caste peut en C++ en POO par ce que les convertions sont implicites   Sous -> Super[:spamafote] . par contre on utilise le dynamic_cast dans certaines situations sur Super -> Sous

n°670518
SquiZZ
Posté le 11-03-2004 à 09:27:05  profilanswer
 

vive le C++, à bas le java  [:ddr555]  
bon, après tout c'est juste une différence d'approche java/c++.
allez faut que j'aille au boulot.
 

n°670527
benou
Posté le 11-03-2004 à 09:31:02  profilanswer
 

SquiZZ a écrit :

Je repose ma question : à quoi ca sert d'avoir l'opérateur de cast sur les objets dans un langage si il ne sert a rien ?


parce que des gens sont un peu plus ouvert d'esprit et comprennent pas à quoi il sert ?

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

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

  [java] thread et sleep en ns

 

Sujets relatifs
Pont Java - ActiveX[JAVA - JAVASCRIPT] Ouvrir la Sun Java Console [Résolu]
Regex et Java[java]Transferer un fichier quelconque d'un client a un serveur ?
Programmation Orientée Composants en java[JAVA][AWT] Bug avec TextArea sous windows ?
[Java] Polymorphisme : besoin d'explications[java]Comment savoir quel jRadioBouton est coché dans un ButtonGroup ?
Recuperer applet java helpJava et TCP
Plus de sujets relatifs à : [java] thread et sleep en ns


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