Tester une condition pendant un laps de temps [Résolu]

Signaler
Messages postés
37
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
9 octobre 2009
-
Messages postés
37
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
9 octobre 2009
-
Bonsoir,

Existe t-il un outil pour tester une condition durant un certain laps de temps en C++ ou C?

Exemple :
Vérifier si une trame est reçue avant un temps maxi passé en paramètre, renvoyer true si la condition est vraie.

En vous remerciant d'avance, bonne soirée.

Cordialement.

6 réponses

Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
Salut,

Dans le cas général, il n'y a pas vraiment de bonne réponse à ta question :
"Existe t-il un outil pour tester une condition durant un certain laps de temps en C++ ou C?"

Sauf à rajouter un test supplémentaire regardant le temps écoulé dans la boucle + un Sleep eventuellement.

Dans le cas d'une socket, on peut affecter des options de timeout sur recv :
http://www.cppfrance.com/forum/sujet-GERER-TIME-OUT-AVEC-API-WINSOCK_156838.aspx

Dans ton cas, je suppose que tu travaille en RS232. Donc ce serait ReadFile qui serait bloquante. On peut appeler SetCommTimeouts pour régler le timeout du port RS232. Je suppose que ReadFile rend alors la main soit suite à la réception du nombre d'octets désirés soit à la fin du timeout.
Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
Salut,

Je ne vois pas trop ce que tu veux faire, si c'est tester dans ton appli ou avec un outil externe.
Tu peux regarder avec la fonction select.

Sinon il suffit de configrer Etherreal (ou WireSharp) avec timeout et tu verras si tu reçu une trame.

Bien sûre, tout ce que je viens de dire ne fonctionne que pour le réseau.
Messages postés
37
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
9 octobre 2009

Bonjour et merci pour cet essai :)

Non ce n'est pas dans ce cadre là malheuresement :)

C'est dans le code même qu'il faut tester une condition pendant un certain temps.

Pour donner quelques informations complémentaires, il s'agit d'une méthode effectuant plusieurs actions :
- récupération du corps du message (ce qui se trouve entre STX et ETX)
- vérification du checksum, si mauvais => return false et code erreur 11
- si une trame n'est pas recu avant le temps maxi passé en paramètre => return false et code erreur 12
- si une trame correcte a été reçue => return true

Voila, donc je suis à la recherche d'une fonction permettant d'effectuer une condition pendant un temps X définit.

En espérant que cela puisse vous aider :)

Cordialement.
Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
Si tu es sous Windows : WaitForMultipleObject peut peut-être t'aider.

Sinon tu peut aussi créer un événement global, que tu testeras avec WorForSingleObject et qui sera déclenché par un de tes 4 événements.

Sous Lunix se serait avec des semaphores.

C'est à toi de faire ta propre fonction de tests sur tes conditions particulières. Si tu débutes, ce n'est pas évident de t'expliquer et pour toi de le faire. Mais faut un début à tout .
Messages postés
37
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
9 octobre 2009

Oui, c'est vrai que tester une condition sur le temps, ce n'est pas coton pour un débutant :D

Merci pour ces informations, je vais regarder ça de plus près.
Messages postés
37
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
9 octobre 2009

Bonjour,

Je viens en effect de rajouter un test supplémentaire à l'aide d'une boucle "faire tant que", qui tant que la condition n'est pas vérifié, vérifiera la présence de caractères puis effectuera la lecture de ceux-ci si présents.

Merci beaucoup, ca m'a beaucoup aidé.