-
Pool de Thread
Bonjour,
J'aimerais avoir un pool de threads où chaque thread ne pourra pas s'exécuter plus d'un temps donné. Lorsqu'un thread dépasse le temps, il doit être arrêté.
PoolThread n'offre pas cette possibilité il me semble car les Threads ajoutés ne peuvent plus être arrêtés.
J'avais pensé dériver la classe Thread et ajouter à cette classe un membre Thread. En gros, un thread surveille l'autre.
Est-ce une solution raisonnable en terme d'utilisation mémoire et CPU?
Y aurait-il une autre solution?
Merci pour vos réponses.
-
Tu peux utiliser la méthode Join() de la classe Thread qui permet de préciser la durée maximale d'exécution d'un thread.
Comme cette méthode Join() bloque le thread courant, tu peux faire appels à Join() depuis un Thread comme ça ton thread principal n'est pas bloqué.
En gros ton thread principal déclenche un thread qui lui même pilote la durée de vie de tous les autres threads.
-
Join ne sert pas à limiter la vie d'un thread
il sert à dire au thread qui appelle join d'attendre la fin de l'excution d'un autre thread (ou le temps donné en paramètre) avant de continuer son execution
par contre .interrupt devrait aller
-
Bonjour
Et merci pour vos réponses.
En fait j'ai ecris mon propre PoolThread comportant une Queue FIFO des threads en attente d'exécution et un tableau des threads ds l'etat "running". Ma classe gère les dépassements de temps ainsi que le lancement d'un nouveau thread lorsqu'un se termine.
Jai une question sur l'arret du thread qui dépasse son temps imparti. Ces sont des threads qui récupèrent des fichiers sur le net. Je me demandais comment forcer l'arret. par interrupt ou abort. Et cela garantit-il l'arret du thread?
-
abort déclenche une exception, une exception spéciale qui se propage de catch en catch jusqu'à atteindre la fin de la sub sur lequel le thread a démarré, arretant ainsi le thread
c'est moyen dans le sens ou l'exception peut etre lancé alors que c'est du code du framework qui est executé, faisant des comportements étranges parfois
interrupt lui fait que l'execution du thread s'arrete sans donner de suite à son execution