IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Comment implémenter classe TimeOut?


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 94
    Points : 21
    Points
    21
    Par défaut Comment implémenter classe TimeOut?
    Bonjour,

    J'aimerais créer et utiliser une classe TimeOut dans mon logiciel, qui me permettrait de :
    - créer un TimeOut avec en paramètre une fonction à appeler lorsque le TimeOut est écoulée.
    - démarer le TimeOut
    - stopper le TimeOut

    Comment faire?

    Voici à quoi pourrait ressembler l'interface :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    typedef void (*functionForTimeOut)(void);
     
    TimeOut::TimeOut (functionForTimeOut par_f_timeout, unsigned long par_ul_time);
    TimeOut::start();
    TimeOut::stop();
    Merci d'avance pour votre aide.

  2. #2
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    Le sujet des timers est assez délicat. Quels utilisation en auras-tu ? On implémente pas de la même manière un timer multimédia (prècis), et un timer pour de l'interface graphique ou autre.

    De toute façon, à moins que tu disposes d'une boucle principale dans ton programme, il faudra passer par des APIs spécifiques à l'OS, et pas seulement au C++.

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 94
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par NiamorH Voir le message
    Le sujet des timers est assez délicat. Quels utilisation en auras-tu ? On implémente pas de la même manière un timer multimédia (prècis), et un timer pour de l'interface graphique ou autre.

    De toute façon, à moins que tu disposes d'une boucle principale dans ton programme, il faudra passer par des APIs spécifiques à l'OS, et pas seulement au C++.
    Je veux une classe timer tout simple (ni pour interface graphique, ni pour multimédia) dans un thread séparé.
    Mais je ne sais comment faire?

    En fait, je lis continuellement sur une socket qui me renvoie des données, et je veux faire un truc du style :

    1. Lancer Timer pour attendre DONNE_ATTENDU
    2. Traiter donnée reçu
    Si donnée reçu == DONNE_ATTENDU stopper timer
    Sinon continuer à recevoir donner
    3. Si timeOut expiré alors appel d'une fonction

    En gros, j'aimerais faire une classe générique TimeOut.

  4. #4
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    Tu pourrais par exemple lancer un thread Boost qui executerait un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // calcul de l'heure d'arret
     
    while ( isTimerRunning && ( heureActuelle < heureArret ) )
    {
    }
     
    if ( isTimerRunning )
      func();
    Tu peux mettre un sleep dans ta boucle pour pas saturer le proc.
    Le meilleur moyen est quand même de se plonger dans les APIs de ton OS.

  5. #5
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 94
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par NiamorH Voir le message
    Le meilleur moyen est quand même de se plonger dans les APIs de ton OS.
    Mon OS est Windows.
    Quelqu'un aurait une meilleure solution adaptée à mon OS?

  6. #6
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    Si tu peux te permettre de faire du code non portable, alors tu trouveras ton bonheur avec l'api win32.

    Regarde ici : http://www.codeguru.com/cpp/misc/mis...cle.php/c3785/ quelqu'un à déjà codé ça, tu devrais pouvoir t'en inspirer.

    Si tu recherches un timer très précis (ce qui n'a pas l'air d'être le cas), je te conseilles ce lien : http://blogs.msdn.com/larryosterman/...08/462477.aspx



    [EDIT] En fait, la source de mon premier lien est un peu complexe.
    Pour faire un timer simplement, tu fais #include <Windows.h> et tu te sers des fonctions Win32 décrites ici :
    http://windows-programming.suite101....in32_timer_api
    http://windows-programming.suite101....lback_function

  7. #7
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 94
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par NiamorH Voir le message

    [EDIT] En fait, la source de mon premier lien est un peu complexe.
    Pour faire un timer simplement, tu fais #include <Windows.h> et tu te sers des fonctions Win32 décrites ici :
    http://windows-programming.suite101....in32_timer_api
    http://windows-programming.suite101....lback_function
    Oui mais là il faut un handle de Windows... alors que moi ça serait juste en ligne de commande ... pas de windows...

  8. #8
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    En fait, tu peux mettre NULL comme handle de window. Il faut juste que tu stocke l'ID du timer au retour de SetTimer si tu comptes l'arrêter avant qu'il ne se déclenche.

Discussions similaires

  1. Réponses: 3
    Dernier message: 08/07/2014, 18h41
  2. Comment implémenter lemonldap?
    Par Aldo dans le forum Apache
    Réponses: 7
    Dernier message: 25/01/2007, 21h32
  3. Comment implémenter un Datawarehouse ?
    Par raslain dans le forum Alimentation
    Réponses: 2
    Dernier message: 20/10/2005, 11h09
  4. comment modifier le timeout d'une vye dans sql server 2K ?
    Par jlassira dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 07/10/2005, 11h28
  5. [Serveur] Comment désactiver un "timeout" ?
    Par Johnbob dans le forum Plateformes (Java EE, Jakarta EE, Spring) et Serveurs
    Réponses: 4
    Dernier message: 04/12/2004, 01h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo