petit probleme de communication inter thread - C - Programmation
Marsh Posté le 27-03-2009 à 12:18:25
birdyz53 a écrit : solution ... mettre un timer ... oui mais comment dire au timer de libérer un sémaphore qui a été verrouiller ailleurs ... ben on peu pas (c'est même le but d'une sémaphore...) |
Gérer un timer qui détruit le sémaphore (ou qui envoi un message de déblocage) à échéance ...
Marsh Posté le 27-03-2009 à 12:35:31
oui mais comment un timer qui s'exécutera si je ne me trompe dans un autre thread peut il détruire une sémaphore qui ne lui appartient pas?
l'ennui ici c'est que la fonction qui libère la sémaphore est exécuter que si une action a lieu sur le port RS232
Marsh Posté le 27-03-2009 à 12:44:08
birdyz53 a écrit : oui mais comment un timer qui s'exécutera si je ne me trompe dans un autre thread peut il détruire une sémaphore qui ne lui appartient pas? |
Il suffit de lui passer son adresse au lancement du thread timer...
Marsh Posté le 27-03-2009 à 15:26:57
oui mai le dernier a avoir verrouiller la sémaphore sera l'autre thread... et par principe il n'y a que lui qui peut déverrouiller sa sémaphore non?
je ne veux pas entendre par la avoir la sémaphore mais "être le propriétaire" de la sémaphore.
Marsh Posté le 27-03-2009 à 23:08:53
Il est possible de mettre des timeouts sur les sémaphores. Je ne retrouve plus le lien qui en parlait cependant.
Marsh Posté le 30-03-2009 à 11:30:39
j'ai trouver des fonctions dans l'ide qui correspondent a mon besoin et qui m'ont même permit d'améliorer mon code ...
pour ceux qui connaisse labwindows ... ce sont les fonctions CmtNewTSQ etc...
merci a tous en tout cas
Marsh Posté le 27-03-2009 à 12:06:04
j'ai un souci avec une application multithread je vais essayer d'être claire
en gros :
j'ai mon IHM dans un thread
au démarrage j'initialise un autre thread qui a un callback sur un événement du port série
se thread (numéro 2) verrouille une sémaphore ...
lorsque l'ihm fait une demande sur le port série elle attend gentilment que le sémaphore soit libéré
des que le port série reçoit une réponse il libère la sémaphore
l'ihm reprend alors sont traitement normal et tout le monde est content ...
tout le monde ... sauf le pauvre mec qui c'est gouré de port série et qui n'aura donc jamais de réponse... et il verra son appli figée ... a attendre une réponse en vain ...
solution ... mettre un timer ... oui mais comment dire au timer de libérer un sémaphore qui a été verrouiller ailleurs ... ben on peu pas (c'est même le but d'une sémaphore...)
es que vous auriez des idées de solutions ???