Bonjour,

J'essaie de synchroniser 3 threads de lecture et écriture sur un bus CAN et j'ai des petits problèmes.

Mes trois classes dérivent d'une classe ThreadClass qui offre, enfin qui essaie d'offrir plutôt en ce moment, des méthodes de synchronisation. Mon but est d'avoir des threads qui se comporte de la manière suivante :

- les 2 threads d'écritures peuvent à tout moment envoyer un message sur le bus et se bloquent après chaque écriture
- le thread de lecture vérifie toutes les x ms si quelque chose est présent sur le bus et si c'est le cas libère le thread pour lequel la réponse est adressée

Les méthodes que j'ai créé pour sont les suivantes :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
void ThreadClass::WaitOne()
{
    ResetEvent(hEvent);
    WaitForSingleObject(hEvent,INFINITE);
}

void ThreadClass::Set()
{
    SetEvent(hEvent);
}
hEvent est déclaré dans ThreadClass en protected et initialisé dans les constructeurs des classes dérivées de la manière suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
hEvent = CreateEvent(NULL,FALSE,FALSE,"EventMotor");
Lorsque j'ai un seul thread d'écriture actif tout se déroule sans aucun problème mais dès que je démarre le 2ème plus rien ne fonctionne. J'ai l'impression que les deux threads d'écriture se bloquent sur le même évènement. Ils ne se déroulent que les deux en même temps mais si j'en bloque un ils se bloquent les deux.

Que fais-je donc de faux ?