Mose,
Tout d'abord merci pour ta réponse.
J'ai simplifié la structure du programme et n'ai plus qu'un seul Thread. Les opérations de lecture de d'écriture de données sont effectuées dans ce même Thread dans un bloc Lock : le but est d'empêcher tout nouvel appel à ces deux opérations de traitement de données tant qu'une opération est en cours.
Agent
|_ Wrapper : Run() --> le Thread boucle ici
|_ Worker : Work() --> traitement dans bloc Lock
L'agent lance un Thread qui pointe sur la méthode Run() du Wrapper. Cette méthode est une boucle qui appelle la méthode Work() du Worker.
Quand cette propriété vaut True, on sort de cette boucle, le Thread termine son travail et meurt.
1 2 3 4 5 6 7 8
|
public void Run()
{
while (!m_Agent.Stopped)
{
m_Worker.Work();
}
} |
Par contre, j'ai toujours le même problème : après un redémarrage (start > stop > start > stop) et suite au dernier arrêt, les traces indiquent une nouvelle connexion à une base de donnée.
Ce que j'ai omis de préciser, c'est que le C# utilise un composant "maison" C++. C'est ce composant qui signale dans les traces un nouvelle ouverture de connexion. D'autant plus navrant, puisqu'on ne repasse pas dans le code C# qui ouvre les connexions
...
Je pense donc que ce n'est pas un problème de Threading côté C#, mais côté C++ : le composant ne doit pas être conçu pour être utilisé dans un context Threading. Je précise qu'un seul Thread tourne "à la fois".
Mes questions
- me confirmes-tu (comme je crois le savoir) qu'un Thread ayant terminé sa tâche meurt de lui-même ?
- as-tu une expérience dans ce contexte C# - C++ avec utilisation de Thread ?
Merci.
Partager