Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3127 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [cpp] créer un timeout sur une méthode

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[cpp] créer un timeout sur une méthode

n°1538701
Profil sup​primé
Posté le 04-04-2007 à 22:23:31  answer
 

Bonjour,
 
J'ai besoins de vos connaissances pour me donner une idée :D
 
J'aimerai pouvoir définir un timeout sur une méthode d'une classe.
 
Je m'explique. Je récupère des données d'un banc de test relié a un PC via une carte d'acquisition. Si un état (d'un capteur) n'est pas détecté au bout d'un certain temps, je veux en conclure que le banc de test n'est pas (correctement ?) branché a cette carte, ou le système mécanique bloqué. Le problème est que, pour vérifier l'état de ce capteur, avec la carte d'acquisition que je dois utilisé, je suis obligé de lire en boucle via un API, une entrée.
 
Pour le moment ce que je fait c'est lire en boucle jusqu'a ce que l'état soit détecté (c'est l'attente d'une fin de course). Et si cet état n'est pas détecté, je reste toujours bloqué dans cette boucle.
 
Au début j'ai pensé incrémenter une variable à chaque lecture, mais c'est pas terrible et pas précis niveau temps. Je voudrais que si la méthode n'a rien retournée (et ne c'est donc pas terminé) avant un certain temps (genre 4 secondes, configurable), que celle-ci soit forcée de s'arrétée (kill).
 
 
Existe-t-il quelque chose de tout fait pour réaliser cela ?
 
Je développe sous Visual C++ 6.0 et l'utilisation des MFC est possible. Je veux éviter de créer un Thread (moi même) pour faire ça.
 
Merci d'avance de votre aide et de vos idées :)

mood
Publicité
Posté le 04-04-2007 à 22:23:31  profilanswer
 

n°1538730
karlkox
Posté le 04-04-2007 à 23:16:54  profilanswer
 

CreateEvent + WaitForSingleObject

n°1538991
ChristianS​_
Posté le 05-04-2007 à 15:30:04  profilanswer
 

et si tu prends le temps (l'heure) au début du traitement,  
et qu'a chaque boucle tu reprends le temps, tu auras le temps écoulé,
tu pourras donc le tester pour sortir de la boucle.

n°1539228
Profil sup​primé
Posté le 05-04-2007 à 20:22:31  answer
 

J'avais pensé à ça KarLKoX, mais ça m'oblige a recréer encore un thread
 
Très bonne idée ChristianS_ ! je vais essayer comme ça !
 
 
merci a vous deux pour cette aide :)


Message édité par Profil supprimé le 05-04-2007 à 20:22:50
n°1539271
joneal
Posté le 05-04-2007 à 22:21:24  profilanswer
 

en plus de ces 2 solutions
je dirais :
- si tu es dans une application win32 SetTimer()
- sinon timeSetEvent()
 
cf msdn
 

n°1539518
breizhbugs
Posté le 06-04-2007 à 12:05:56  profilanswer
 

joneal a écrit :

en plus de ces 2 solutions
je dirais :
- si tu es dans une application win32 SetTimer()
- sinon timeSetEvent()
 
cf msdn


Mais cela suppose que son programme traite les messages de windows et donc qu'il ne soit pas deja bloqué dans sa boucle pour verifier l'etat du capteur.

n°1539874
youplab00m
Posté le 06-04-2007 à 23:39:59  profilanswer
 

Le plus simple c'est de faire une boucle qui compte le temps ecoulé et s'arrete si timeout ou lecture de la carte d'acquisition.
Par contre il faut mettre un 'wait' dans la boucle, genre 100 ms, afin de ne pas prendre tout le CPU et de rester interruptible par les events windows.

n°1539914
el muchach​o
Comfortably Numb
Posté le 07-04-2007 à 10:45:22  profilanswer
 


Pour faire ça, c'est pourtant ce qu'il y a de plus recommandé pour un fonctionnement correct de ton application. Je suis prêt à parier que tôt ou tard, tu te verras obligé de passer par des threads, donc autant commencer tout de suite. Ceci dit, l'utilisation des threads nécessite de la rigueur et de laréflexion.


Message édité par el muchacho le 07-04-2007 à 10:46:33
n°1539952
Profil sup​primé
Posté le 07-04-2007 à 13:19:44  answer
 

Je sais tres bien, mais pour des raisons qui sont propres a mon projet, j'ai une limite en nombre de thread que je dois éviter de dépasser. Ce que je cherche à faire n'est pas quelque chose de très précis, mais c'est vraie que tu as raison.
 
Je vais me baser sur l'idée toute simple de ChristianS_ qui suffira largement pour détecter l'absence de banc de test au bout d'un certain temps (je ne suis pas a une seconde pret...) . Je vais mettre en oeuvre ça cet aprem si j'ai le temps.
 
Marchi et bon week-end de Pâques. :)

n°1540338
slash33
Posté le 09-04-2007 à 00:06:22  profilanswer
 

Ben qui dit timeout dit objet de synchro non ?
Section critique, Mutex, Evenement, Sémaphore... tu n'as que l'embarras du choix. N'oublies pas de mettre le timeout pour le Lock.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [cpp] créer un timeout sur une méthode

 

Sujets relatifs
Méthode pour contribuer a un projet JavaComment créer un programme?
créer une licence logicieldemande d'aide pour créer une interface pour modification sur un site
créer un logiciel utilisant internet....créer un naviguateurCréer rapport dynamiquement
[php] Creer un calendrier[C#] Créer une DLL C#, et l'appeller depuis VB6...
creer et/ou modifier materiaux + l'appliquer + VBA + CATIAcréer un flux rss sur un forum
Plus de sujets relatifs à : [cpp] créer un timeout sur une méthode


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR