thread et sleep en ns [java] - Java - Programmation
Marsh Posté le 10-03-2004 à 17:26:47
manu025 a écrit : Salut ! |
du ns en java je trouve cela difficilement realisable, enfin, je peux me tromper
Marsh Posté le 10-03-2004 à 17:29:39
c'est pas une source officielle, mais ca me parat logique :
http://www.talkaboutprogramming.co [...] 16031.html
Marsh Posté le 10-03-2004 à 17:32:23
ça dépend aussi du système sous-jacent.
tu veux pas faire un yield plutot ?
Marsh Posté le 10-03-2004 à 17:34:31
Taz a écrit : |
ca a pas du tout le même usage ... yield rend la main, sleep fait une pause
Marsh Posté le 10-03-2004 à 18:00:00
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.
Marsh Posté le 10-03-2004 à 18:08:00
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
dans ce cas, y a qu'à faire un for (int i=0;i<100; i++){}, ca fait une petite pause aussi
Marsh Posté le 10-03-2004 à 18:16:29
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
Marsh Posté le 10-03-2004 à 18:31:49
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 ?
Marsh Posté le 10-03-2004 à 18:34:23
non. parce que c'est la seule façon que j'ai trouvé de faire une pause aussi courte que possible.
Marsh Posté le 10-03-2004 à 20:06:56
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.
Marsh Posté le 10-03-2004 à 21:31:11
Taz a écrit : comment cai possible |
Code :
|
Marsh Posté le 10-03-2004 à 21:32:25
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 ...
Marsh Posté le 10-03-2004 à 21:36:33
benou a écrit :
|
Code :
|
Marsh Posté le 10-03-2004 à 21:37:10
benou a écrit :
|
et dans ce cas c'est pas possible de faire un Thread.yield() ?
Marsh Posté le 10-03-2004 à 21:38:12
benou a écrit : |
sur ? faudrait pouvoir voir comment la machine de Sun ordonnance ses threads
Marsh Posté le 10-03-2004 à 21:38:29
SquiZZ a écrit :
|
tu peux pas faire super.super
Marsh Posté le 10-03-2004 à 21:39:36
benou a écrit : |
c'était juste au cas ou, super c'est un des seuls trucs dont je me rappelle en java
Marsh Posté le 10-03-2004 à 21:54:12
ReplyMarsh Posté le 10-03-2004 à 21:56:03
SquiZZ a écrit : |
en java y a pas moyen de squizzer () l'implémentation parente d'une classe pour remonter à l'implémentation "grand-parente"
Marsh Posté le 10-03-2004 à 21:56:15
tu peux m'expliquer ? et me dire pourquoi le Thread.yield() ne marcherait pas ?
Marsh Posté le 10-03-2004 à 21:58:25
Taz a écrit : tu peux m'expliquer ? et me dire pourquoi le Thread.yield() ne marcherait pas ? |
oups ... t'as raison, j'avais oublié que le yield était static
quel con
Marsh Posté le 10-03-2004 à 22:18:01
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 : jeu de mots !
Marsh Posté le 10-03-2004 à 22:25:39
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
Marsh Posté le 10-03-2004 à 23:01:25
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.
Marsh Posté le 10-03-2004 à 23:11:26
ReplyMarsh Posté le 10-03-2004 à 23:12:55
ReplyMarsh Posté le 10-03-2004 à 23:27:10
donc si j'ai bien tout compris, on ne peut transtyper que des types de base et pas des objets ?
Marsh Posté le 10-03-2004 à 23:29:14
SquiZZ a écrit : donc si j'ai bien tout compris, on ne peut transtyper que des types de base et pas des objets ? |
absolument rien à voir
Marsh Posté le 10-03-2004 à 23:57:44
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 :
|
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 :
|
j'espère que me retrouve pas avec un entier qui vaut 5.6
Marsh Posté le 11-03-2004 à 08:55:58
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
|
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
Marsh Posté le 11-03-2004 à 09:12:53
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
benou a écrit : |
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 : |
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 ?
Marsh Posté le 11-03-2004 à 09:23:11
SquiZZ a écrit : |
on caste peut en C++ en POO par ce que les convertions sont implicites Sous -> Super . par contre on utilise le dynamic_cast dans certaines situations sur Super -> Sous
Marsh Posté le 11-03-2004 à 09:27:05
vive le C++, à bas le java
bon, après tout c'est juste une différence d'approche java/c++.
allez faut que j'aille au boulot.
Marsh Posté le 11-03-2004 à 09:31:02
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 ?
Marsh Posté le 10-03-2004 à 17:23:14
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 -@-