didoux95
Messages postés845Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention 1 août 2017
-
13 févr. 2007 à 14:50
didoux95
Messages postés845Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention 1 août 2017
-
14 févr. 2007 à 21:18
Bonjour a tous.
je debut un peut avec les threads et j'ai un petit soucis.
Donc voila, j'aimerais suspendre un thread et pouvoir le relancer comme si il ne s'etait pas arreter.
j'ai essaye les methodes ".stop()" et ".start()" mais elles me l'arrete et me le lance comme si il n'avait jamais ete lancer.
j'ai trouver deux autres methodes sur internet qui me permettent cela ("suspend()" et "resume()") seulement elles m'empechent de pouvoir utiliser d'autre thread (plusieur fois la meme class).
Donc est ce qu'il existerait des methodes qui me permettent de mettre en "pause" mon thread et de le relancer (le faire repartir a l'endroit ou il a ete mit en pause) ?
didoux95
Messages postés845Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention 1 août 20172 13 févr. 2007 à 18:05
nn, en tous cas elle ne semble pas s'effectuer: dans ce thread j'enregistre des flux dans un fichier. lorsuqe je suspend le thread, l'enregistrement est sance etre suspendu; seulement dans le fichier il n'y a aucune "coupure" le son est toujours fluide...
merci.
didoux95
Messages postés845Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention 1 août 20172 13 févr. 2007 à 18:35
Bonjour.
ta methode "bloque" mon programme. Tout a l'heure dans le train j'avais pense a un truc comme ca:
"boolean Suspendre = true;
public void Suspendre(){
Suspendre = true;
while (Suspendre){
try{
this.sleep(100);
}catch (Exception ex){}
}
}
public void Reprendre(){
Suspendre = false;
}"
Ces deux methode bloque mon interface graphique (donc je pense le programme) ce qui empeche l'utilisateur de relancer le thread.
didoux95
Messages postés845Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention 1 août 20172 13 févr. 2007 à 18:36
mon prgramme enrgistre des flux (des musiques ...) donc en permettant la mise en pause de mon thread, je permet en quelque sorte a l'utilisateur des "couper" ses morceaux.
Tu as parler d'un solution plus simple, quel est - elle ?
merci
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013129 13 févr. 2007 à 19:20
Je te parlais du système de sémaphore, donc ce n'est pas vraiment applicable dans ton cas : les sémaphores, c'est faire attendre un thread tant que les autres ne sont pas arrivé au même point, ou bloquer un thread tant qu'un autre utilise une ressources partagée.
Mais pour ce que tu cherche à faire, tu es sûr d'avoir besoin d'interrompre une thread pour cà ?
Dans ton code, tu fait un this.sleep, donc cela s'applique à la classe où est déclarée ta procédure Suspendre, tu es sûr que tu as mis cette méthode dans la classe du thread à interrompre ?
J'utilise le suspend() pour un jeu que j'ai fait (en l'occurence mario), et ca marche nickel : un suspend mets en pause le jeu, bien que tout le reste soit exécuté normalement, et lorsque je fait un resume, le jeu reprend...
cs_AlexN
Messages postés694Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention 8 janvier 201418 13 févr. 2007 à 19:23
les méthodes sleep() et yield() sont des méthodes de classe.
this.sleep(100); // tu dois avoir un warning
Thread.sleep(100); // passe le thread courant à l'état bloqué pendant 100 ms.
Ta méthode marche peut être. Mais c'est une implémentation un peu barbare des sémaphores. Dans la mesure où sleep() est interruptible et ton thread peut recommencer avant le moment voulu. D'autre part comme Suspendre semble commun à tous les thread (non verouillé comme un sémaphore), tous les thread peuvent le modifier.
Si yield() bloque ton programme c'est peut être parce que tu l'invoques dans le mauvais thread.
didoux95
Messages postés845Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention 1 août 20172 13 févr. 2007 à 19:35
Effectivement, je n'avais pas pense a, tout simplement suspendre l'enregistrement.
si non, ma methode suspendre est dans ma class (cette class herite de la class Thread).
Ca y est!!! j'ai reussit a trouver un compromi avec les methode suspend() et resume() seulement unnouveau pb est "apparu".
J'ai une methode "Arreter" qui detrui le thread. lorsque j'utilise ces deux methodes, java me genre une exception quand je clique sur ce bouton.
cs_AlexN
Messages postés694Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention 8 janvier 201418 14 févr. 2007 à 13:20
Salut,
"mon prgramme enrgistre des flux (des musiques ...) donc en permettant
la mise en pause de mon thread, je permet en quelque sorte a
l'utilisateur des "couper" ses morceaux."
Je ne comprend pas bien ce que tu veux faire :
"Mettre en pause" je comprend "suspendre temporairement l'execution"
"Couper" je comprend "arreter l'enregistrement definitivement"
didoux95
Messages postés845Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention 1 août 20172 14 févr. 2007 à 21:18
En fait, "permettre en quelque sorte a l'utilisateur des "couper" ses morceaux" etait un exemple de ce a quoi cette fonction pouvait me servire.
Donc la seule chose vraiment essentiel est "Mettre en pause" => "suspendre temporairement l'execution"