Je travaille sur un programme qui lit de la musique en arrière-plan via le multithreading, car l'interface graphique gèle autrement. J'ai une connaissance de base du multithreading (volatile, synchronisation, etc.) mais je me demandais comment arrêter/suspendre immédiatement un thread (même lorsque les processus sont en cours de traitement). J'ai la musique en boucle en arrière-plan mais si j'accrocher une variable d'arrêt jusqu'à la boucle, la chanson doit cesser de jouer pour que la musique s'arrête. Donc, ma question demeure, à partir du fil parent est-il un moyen de mettre immédiatement en pause ou terminer la musique au milieu de la chanson, parce que j'ai l'audio à jouer après.Mettre en pause la musique dans JFugue
Répondre
D'abord, la plupart des boucles dans un fil devrait ressembler à ceci:
while(!isInterrupted()) {
try {
// do something (like play song)
} catch (InterruptedException e) {
interrupt();
}
}
S'il y a blocage des appels à l'intérieur de la boucle (qu'elle sonne comme de votre description), ils permettent probablement d'interruption(). Un appel à l'interruption() de l'extérieur du thread va casser l'appel de blocage et vous vider dans le bloc catch. Cela finit par effacer le drapeau "interruption", donc vous devez appeler à nouveau l'interruption pour sortir de la boucle.
Selon la façon dont vous écoutez de la musique:
- Si vous utilisez une bibliothèque qui a une méthode « pause » ou « stop » pour jouer la musique, vous pouvez simplement utiliser. On dirait que vous utilisez jFugue - son lecteur a une méthode pause() - avez-vous essayé d'appeler ça?
- Si vous faites quelque chose d'autre, vous devez garder une trace de la position de la chanson et appeler l'interruption() sur le fil. Si vous voulez redémarrer, vous devez demander à la position suivie
Notez que si vous voulez redémarrer avec la boucle au-dessus, vous aurez besoin d'une boucle imbriquée comme:
while(true) {
while(!isInterrupted()) {
...
}
}
Si vous avez seulement la boucle! IsInterrupted(), le thread se terminera et ne pourra pas être redémarré.
Espérons que cela aide!
Note: Je viens de remarquer que le sujet mentionne jFugue. J'ai regardé les docs et sa classe Player a une méthode pause(). Avez-vous essayé cela? –
- 1. Mettre en pause/couper la musique de fond dans iOS
- 2. Reprendre la musique après pause Phonegap
- 3. Comment mettre en pause la musique dans le sélecteur de tâches et verrouiller l'écran?
- 4. Comment faire une pause dans la musique de fond ios
- 5. Comment mettre en pause la musique lorsque le téléphone sonne, que le SMS est reçu, etc.?
- 6. Instrument ne change pas Jfugue
- 7. Application Android pour Pause/Reprendre la musique d'une autre application de lecteur de musique
- 8. mettre en pause une vidéo dans AVExportSession
- 9. Mettre en pause un storyboard dans WPF?
- 10. Mettre en pause un processus dans Windows
- 11. mettre en pause le lecteur
- 12. Comment mettre la minuterie en pause dans C#?
- 13. Comment mettre en pause la capture vidéo dans Android?
- 14. Mettre automatiquement en pause l'application de la console dans C#
- 15. Comment mettre en pause, arrêter et réinitialiser un AUFilePlayer?
- 16. Mettre en pause un mediaplayer sur un événement
- 17. mettre en pause et reprendre l'application
- 18. Ralentir ou mettre en pause NSAnimationContext
- 19. Mettre en pause une lecture de SourceDataLine
- 20. comment mettre en pause la console en langage F #
- 21. comment mettre en pause la vidéo en utilisant ASIHTTP
- 22. Mettre en pause l'exécution d'une tâche
- 23. mettre en pause la page avant de la rediriger
- 24. Comment mettre en pause un appel setTimeout?
- 25. NSOperation: comment mettre en pause et reprendre
- 26. jFugue analyser le tempo incorrectement
- 27. socket.listen (0); mettre en pause un fil?
- 28. Amazon EC2 peut mettre en pause?
- 29. Mettre en pause un fil de téléchargement
- 30. Mettre en pause un média en utilisant le gestionnaire audio
Voulez-vous mettre la musique en pause ou mettre un fil en pause? (Astuce: vous voulez mettre en pause la musique, pas le fil.Le fil peut contenir un verrouillage critique.) –
@DavidSchwartz Alors oui, je veux mettre en pause la musique, je vais changer le titre. – EpicDavi