Tester une condition pendant un laps de temps

Résolu
lomatic Messages postés 37 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 9 octobre 2009 - 2 nov. 2008 à 23:28
lomatic Messages postés 37 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 9 octobre 2009 - 3 nov. 2008 à 15:59
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

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
3 nov. 2008 à 14:15
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.
3
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
3 nov. 2008 à 09:32
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.
0
lomatic Messages postés 37 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 9 octobre 2009
3 nov. 2008 à 09:38
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.
0
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
3 nov. 2008 à 10:14
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 .
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lomatic Messages postés 37 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 9 octobre 2009
3 nov. 2008 à 10:17
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.
0
lomatic Messages postés 37 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 9 octobre 2009
3 nov. 2008 à 15:59
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é.
0
Rejoignez-nous