Synchroniser l'envoi et la réception

Signaler
Messages postés
1115
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
6 mai 2021
-
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
-
Bonjour,

J'essaie de de faire une sorte de Send/Receive synchrone.
J'utilise les mutex, mais je ne comprends pas pourquoi il ne se met pas en attente d'un signal.

Dans le contructeur de la classe :
Mutex mutexAuthent = new Mutex();

J'envoie :
MaFonctionSend();
if (mutexAuthent.WaitOne(2000, true) == false)
{
// timeout
}
// Mon traitement

Dans mon Thread de réception, j'ai quelque part :
mutexAuthent.ReleaseMutex();

Où est mon erreur ? En fait quand j'envoie mes données le mutex d'attend pas le signal "Release". Le programme passe directement par "Mon Traitement", ce qui voudrait dire que le mutex a reçu un signal, mais je ne sais pas d'où.

Quelqu'un aurait une idée ?

Merci.

3 réponses

Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
18
le premier waitone n'est pas bloquant. si un deuxieme thread appel waitone sur ton mutex, la ce sera bloquant (pour le deuxieme thread, qui attendra alors que le premier ait appelé releasemutex).
Messages postés
1115
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
6 mai 2021
4
Oui en effet, je me suis rendu compte de la "connerie" de ma question.

Comment mettre en pause la fonction d'envoi (parce que sinon la réponse la fonction continue des instructions ou s'arrête) ?

J'ai pensé aux EventHandler, mais c'est complètement asynchrone.
Ou encore créer une variable globale, et tester son changement d'état (suivant si on a eu ne réponse ou un timeout) : un peu lourd dingue comme méthode.
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
18
il faut mettre aussi un waitone dans ton autre thread qui doit etre bloquant, ainsi le premier qui passe sur le waitone prend la ressource et execute son code jusqu'au releasemutex, et l'autre thread ne reprend la main qu'apres