Comme nous savons que chaque minuterie écoulée méthode rappels sur un thread séparé. Y a-t-il un moyen d'annuler le thread minuteur dans C#? Supposons qu'un thread de minuteur soit bloqué lors d'une opération longue. Comment un nouveau thread abandonnerait-il le thread bloqué? Thread.CurrentThread pointe sur le thread appelant au lieu du thread bloqué.abandonner les threads minuterie
Répondre
L'annulation de threads entraîne une exception asynchrone. La meilleure façon d'annuler les threads est donc de ne pas avorter du tout. Au lieu de cela, utilisez mutex et sémaphores pour signaler l'annulation, puis interrogez continuellement l'état d'annulation. si l'annulation est signalée ne rien faire.
Il me semble que la façon la plus simple est de stocker l'objet de fil avant que le thread de minuterie effectue des travaux avec le code comme ceci:
timerThread = System.Threading.Thread.CurrentThread;
Puis, quand vous devez l'annuler, appelez
timerThread.Abort();
Modifier: Par commentaires, je dirai que l'abandon de threads n'est pas une bonne idée. Il est préférable de les faire se terminer gracieusement. Je suggère d'envoyer une sorte de message au thread, peut-être en définissant simplement un drapeau, et en faisant en sorte que le thread se termine quand il trouve ce message.
Ce n'est vraiment pas une bonne idée. Cela déclenchera une exception ThreadAbortException dans le thread qui peut ou non être préparé pour le gérer. Encore pire si le thread finit par être un thread ThreadPool. – Aaronaught
Bien, abandonner les discussions n'est pas une bonne idée, mais c'était la question. – BlueMonkMN
Les minuteries System.Threading utilisent ThreadPool et les threads de réutilisation ThreadPool en tuer un sous ses pieds n'est jamais une bonne idée. –
Implémentez votre minuteur en tant que BackgroundWorker avec WorkerSupportsCancellation et vérifiez si vous avez sélectionné CancelPending dans votre minuteur écrit manuellement?
Je crois que même si vous annulez le thread worker de fond. il continue à traiter le travail en arrière-plan. – TrustyCoder
Il peut continuer le traitement. C'est à vous de vérifier pour CancellationPending dans la méthode DoWork de votre BackgroundWorker et d'arrêter si cela est vrai. –
Uh. Oui. Je n'avais pas réalisé que je devais le dire explicitement. BackgroundWorker est essentiellement un objet Thread avec deux avantages: - il vous permet de demander une annulation (externe) et de vérifier si une annulation a été demandée (en interne) afin que vous puissiez avoir une sortie propre - capturez l'événement de terminaison de thread –
- 1. Comment abandonner les threads/tâches CCR?
- 2. Abandonner les privilèges root?
- 3. Abandonner les coroutines
- 4. Abandonner globalement toutes les requêtes jQuery AJAX
- 5. Comment abandonner l'impression?
- 6. quand abandonner l'enregistrement actif?
- 7. Comment abandonner une macro
- 8. thread STA Abandonner Exception
- 9. Python Threading avec minuterie
- 10. Minuterie JQuery pour les matchs
- 11. Intervalles de minuterie, Faire une minuterie arrêter une autre minuterie -
- 12. asp: minuterie avec filetage
- 13. Comment abandonner Buildr avec élégance?
- 14. Abandonner le tri par datagridview
- 15. Remplacement du schéma ORM sans abandonner toutes les données
- 16. Onglet Page lancement d'une minuterie
- 17. Libcurl via les threads
- 18. problème avec les threads
- 19. Les threads Java doutent
- 20. PyQT et les threads
- 21. Arrêter les threads
- 22. Redémarrer les threads normaux
- 23. Exécuter les threads commandés
- 24. Comment deux threads ou plus sont-ils synchronisés à l'aide d'une minuterie dans le noyau Windows?
- 25. Problème d'interruption de minuterie dans vb.net
- 26. une minuterie par thread en utilisant Qt
- 27. Abandonner le traitement HTMLParser en Python
- 28. Interruption des threads natifs
- 29. Python: pénalité pour les threads dormants
- 30. Comment abandonner l'exécution d'un script Python?
Langue? Plate-forme? –
On dirait l'anglais pour moi. – MusiGenesis
Tous les rappels de minuterie ne se déclenchent pas sur des threads séparés. Quelle minuterie utilisez-vous? –