Gestion des timeouts sur port com C/C++

HeXa2 Messages postés 22 Date d'inscription mardi 10 mars 2009 Statut Membre Dernière intervention 9 avril 2009 - 6 avril 2009 à 16:28
HeXa2 Messages postés 22 Date d'inscription mardi 10 mars 2009 Statut Membre Dernière intervention 9 avril 2009 - 7 avril 2009 à 11:36
Bonjour!

Je suis actuelement en train de generer une dll qui comunique sur le port série
Il me faut gerer les timeouts.

je veux qu'au bout de 1500ms d'inactivité sur le port, un flag se leve et que le soft qui utilise la dll puisse récuperer ce flag.

cependant, ma dll fait plein de trucs en meme temps et il faudrait que je puisse faire tourner la fonction en backgroung
(vous savez, comme sous nux ou il suffit de mettre le & devant l'appel)

j'avais pensé a utiliser un waitforevent, mais je ne sais pas trop comment le mettre en oeuvre, j'ai été jeter un oeil sur MSDN et il me donne ca:
<hr size= "2" width="100%" /> HRESULT
  IDebugControl::WaitForEvent(
    IN ULONG  Flags,
    IN ULONG  Timeout
    );
<hr size ="2" width="100%" />en gros, je donne le nom de ma variable drapeau (ULONG) et le nombre de millisecondes avec que le flag s'active...

Mais..; comment le mettre dans le code..? dois-je definir une fonction ou dans un bout de code a l'initialisation du port? est ce que c'est une fonction bloquante ou au contraire , est ce que le sequencement va continuer jusqu'a ce qu'un evenement soit detecté, est ce que je peux aussi mettre un controle en background qui lui dit les operations a effectuer si il leve son drapeau?

Merci d'avance pour vos reponses, si j'ai pas été tres clair, vous pouvez poser vos questions, et je peux aussi fournir mon code.

HeXa

1 réponse

HeXa2 Messages postés 22 Date d'inscription mardi 10 mars 2009 Statut Membre Dernière intervention 9 avril 2009
7 avril 2009 à 11:36
Bonjour!

J'ai reflechi un peu (et oui ca m'arrive) et je me suis dit que la meilleure solution est de passer par un thread.

dans mon thread je fais un getcommevent (fonction bloquante) et si ca passe (typiquement si il y a un event sur le port com), je fais passer une varible booleenne i a son etat inverse (je fais ca par pointeur pour pouvoir recuperer tout ca dans mon programme ppal

dans mon programme ppal, je fais un waitforevent sur i pendant 1200ms qui va empecher l'execution de la suite de mon programme et lever un drapeau erreur.

par consequent, si i ne commute pas (si il n'y a pas d'event sur le port com) waitforevent ne passera pas (et renvera une erreur a la fin des 1200 ms) et le prog ne lancera pas les operations sur le port.

le petit probleme que j'ai maintenant, c'est comment passer tous les parametres a mon thread (le nom du port et le pointeur sur la variable de controle i.

un petit coup de main (rien a voir avec un void main (void) ) et je colle mon code ici pour ceux qui pourraient avoir le meme genre de problemes.

PS: si mon idée est de la merde et que vous pensez qu'il peut y avoir mieux, n'hésitez pas

HeXa
0
Rejoignez-nous