J'essaye d'écrire un ThreadManager pour mon application C#. Je crée plusieurs threads:
Un fil pour mon écrivain de texte.
Un thread qui surveille certaines statistiques.
Plusieurs threads pour effectuer une grande séquence de calculs (jusqu'à 4 threads par core et je lance mon application sur un serveur quad core 2x).Arrêt d'une application multithread
Mon application s'exécute normalement jusqu'à 24 heures à la fois, de sorte que tous les threads sont créés au début et qu'ils persistent tout le temps que l'application s'exécute.
Je veux avoir un seul endroit où je "enregistre" toutes mes bandes de roulement et quand l'application s'arrête, j'appelle simplement une méthode et elle passe par tous les threads enregistrés et les ferme.
A cette fin, je l'ai mis au point la classe suivante:
public class ThreadManager
{
private static Object _sync = new Object();
private static ThreadManager _instance = null;
private static List<Thread> _threads;
private ThreadManager()
{
_threads = new List<Thread>();
}
public static ThreadManager Instance
{
get
{
lock (_sync)
{
if (_instance == null)
{
_instance = new ThreadManager();
}
}
return _instance;
}
}
public void AddThread(Thread t)
{
lock (_sync)
{
_threads.Add(t);
}
}
public void Shutdown()
{
lock (_sync)
{
foreach (Thread t in _threads)
{
t.Abort(); // does this also abort threads that are currently blocking?
}
}
}
}
Je veux faire en sorte que tous mes fils sont tués pour que l'application peut se fermer correctement et arrêter au milieu d'un calcul est très bien aussi. Devrais-je être au courant de quelque chose ici? Cette approche est-elle bonne compte tenu de ma situation?
WOW! Beaucoup de bonnes réponses ... c'est difficile à choisir maintenant. J'ai donné la coche à Nate parce qu'il était le premier, et il serait injuste de l'enlever. Voyons voir ce que les votes disent. Je reçois quelque chose d'utile de toutes vos réponses, alors s'il vous plaît votez vos coeurs. – Kiril
Le comportement par défaut des threads du pool de threads est le même que celui que j'ai suggéré. Si vous ne vous souciez pas que vos threads ne finissent pas, le mien est la solution la plus simple. Évidemment, les autres réponses font de bons points sur la gestion des threads, mais vous indiquez clairement que tuer des threads au milieu d'un calcul est bien. –
Je suis d'accord avec vous Nate;), je ne vais pas enlever la coche, parce qu'il serait injuste et vous m'a donné la réponse la plus précise, rapide et simple ... Je ne veux que d'autres pour obtenir leur juste crédit, donc je veux que tout le monde vote pour toutes les bonnes réponses. – Kiril