[Threading] Thread et Timers
Salut !
J'ai quelques petits soucis en matières de threading :oops:
Je vois très bien le principe (enfin je crois :] ), j'arrive sans soucis à créer des thread. Mais je me trouve maintenant à un soucis lorsque que je souhaite associer un Thread à un Timer...
En gros, j'ai une suite de tâche récurrentes à lancer, chacune sur différents intervalles de temps, différents délai de départ, ...
Je pensais lancer pour chaque tâche un Thread, dans lequel je déclencherai un Timer (Systems.Timers.Timer). J'aimerai ensuite laisser tourner mon service tant qu'au moins une des tâches est active.
Voila ce que j'ai fait:
Code:
1 2 3 4 5 6 7 8 9 10
| foreach (Worker worker in m_config.Workers)
{
Thread thread = new Thread(new ThreadStart(worker.Run));
m_threads.Add(thread);
thread.Start();
}
while (IsAlive)
{
Thread.Sleep(1000);
} |
Avec la propriété IsAlive tel que:
Code:
1 2 3 4 5 6 7 8 9 10
| public bool IsAlive
{
get
{
bool alive = true;
foreach (Worker worker in m_config.Workers)
alive &= worker.IsAlive;
return alive;
}
} |
Là déjà je ne suis pas sur de faire quelque chose de correct et sûr?
Ensuite, pour la méthode Worker.Run():
Code:
1 2 3 4 5 6 7
| internal void Run()
{
m_timer = new System.Timers.Timer(m_waitMinutes * 60000);
m_timer.Enabled = true;
m_timer.Elapsed += new System.Timers.ElapsedEventHandler(RunInternal);
m_timer.Start();
} |
Le soucis c'est mon thread lance la méthode Worker.Run(), mais semble ne plus être actif après avoir lancer le Timer? Le Timer serait-il levait dans un autre Thread (m_timer.Elapsed étant levé dans un autre ThreadPool d'après MSDN) ?
Du coup comment garder un contrôle sur le process de mon Worker?
Et bien sur, je souhaiterai pouvoir tuer à tout moment chacun des Worker en cours, j'ai donc fait:
Code:
1 2 3 4 5 6 7 8 9
| internal void Stop()
{
if (m_timer != null)
{
m_timer.Stop();
m_timer.Close();
m_timer.Dispose();
}
} |
Si quelqu'un maitrisant mieux le sujet sur les Threads que moi pouvait me donner un coup de pouce, ce serai trèèès appréciable :aie:
Merci !