Synchroniser l'envoi et la réception

fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 - 31 oct. 2006 à 10:42
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 - 31 oct. 2006 à 14:19
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

leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
31 oct. 2006 à 11:02
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).
0
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
31 oct. 2006 à 13:53
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.
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
31 oct. 2006 à 14:19
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
0
Rejoignez-nous