hey Dans le cadre d'un projet, j'ai dû écrire un petit client IRC pour l'intégrer. Tout fonctionne bien jusqu'à ce que le programme soit fermé et le thread qui lit l'entrée du canal IRC attend plus d'entrée et ne meurt jamais. InBuffer est simplement une chaîne et dans est un lecteur tamponné sur le socket. la variable die est un booléen et ma pensée était que je peux mettre cela à vrai et il tombera le fil. Le problème est que "inBuffer = in.readLine()" est assis là jusqu'à ce qu'il obtienne une autre ligne.
Quelqu'un peut-il me donner un coup de main?Tuer un thread qui attend la sortie du socket
Répondre
Fermez le flux in
, readLine()
devrait alors revenir null
instantanément.
oublié bufferedReader avait une méthode "ready()" pour tester si elle avait quelque chose dans le tampon. tester cela a fait l'affaire.
Vous pouvez définir un délai d'attente sur le socket et si vous obtenez une exception de délai d'attente, vous pouvez interroger un indicateur d'abandon. Si ce n'est pas le cas, essayez à nouveau de lire.
Vous pouvez consulter cette question: How to terminate a thread blocking on socket IO operation instantly?
Cette question liée à .Net, il s'agit de Java. –
Oups, copié et collé une mauvaise question. J'ai corrigé le lien. – sjlee
Arrêt de la prise pour l'entrée. Cela va fournir un null
à l'appel readLine()
et terminer la boucle.
- 1. Envoi d'instructions à un thread qui attend TCP?
- 2. java: Comment arrêter un thread qui attend de longues périodes
- 3. Tuer un thread non-attentant
- 4. Comment tuer un thread MFC?
- 5. Comment tuer le thread principal du sous-thread dans Jython
- 6. Comment tuer un thread dans Delphi?
- 7. Séparer les threads pour l'entrée et la sortie du socket
- 8. Tuer le socket linux du shell (gentoo amd64)
- 9. Socket Thread et PyGTK
- 10. Pourquoi le thread principal attend la fin d'un autre thread avant de continuer?
- 11. Tuer un processus Java démarré à partir d'un thread
- 12. rediriger la sortie du fichier à trois thread en cours
- 13. Tuer un fil pendant la suppression d'un objet
- 14. Rediriger la sortie shell VxWorks vers un socket
- 15. Redimensionnement du terminal qui préserve la sortie
- 16. Java: Autoriser le thread enfant à se tuer sur InterruptedException?
- 17. Comment tuer un pthread dans ANSI C
- 18. Si un thread attend sur une console.readline est le thread suspendu?
- 19. Qui ferme la connexion socket
- 20. Utilisez un MemoryStream avec une fonction qui attend un Filestream
- 21. Interface graphique avec socket dans un autre thread
- 22. Async Socket Listener sur thread séparé - VB.net
- 23. Exécution d'un flux de socket dans un thread
- 24. comment utiliser ThreadPool pour exécuter thread socket parallèle?
- 25. Maintien de nombreuses connexions socket avec un seul thread
- 26. Un thread d'écriture, un thread de lecture sur le même socket?
- 27. Tuer un processus
- 28. Comment supprimer un thread d'un autre thread dans Java?
- 29. Est .NET Socket Send()/Receive() thread-safe?
- 30. Pourquoi cette sortie attend-elle quelque chose après?
J'ai essayé de faire une méthode appelée die() qui a simplement fait in.close() mais j'ai dû faire que cette méthode déclare qu'elle lance IOException et mette l'endroit où j'appelle imReader.die() dans un try/catch bloc qui ne fonctionne tout simplement pas. – Alex
@Alex: Essayez de mettre une clause try-catch autour de la boucle while. – thejh