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 :

[Interruption] Appel périodique de fonction


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 47
    Par défaut [Interruption] Appel périodique de fonction
    Bonjour,

    malgré mes recherches, je ne trouve pas ce que je souhaite.
    Je pense que c'est quelque chose d'assez simple (d'où le fait que je ne trouve rien ?).
    Je voudrais écrire un programme qui appelle toutes les 10 ms une fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void traitement () {
      // je fais mon traitement
    }
     
    void main () {
      while (1) {
        // je fais des trucs
        // si je m'aperçois que 10ms se sont écoulées j'appelle traitement()
        // je reprends mes trucs de la boucle
      }
    }
    Je me suis renseigné sur les fonctions timeBeginPeriod, timeEndPeriod ... et j'ai une précision de 1ms (cool !).
    Comme vous l'aurez remarqué, je suis sous le système Windows.

    j'ai essayé ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    #include <stdio.h>
    #include<windows.h>
    #include<mmsystem.h>
     
     
    void CALLBACK TimeProc(UINT uTimerID, UINT uMsg, DWORD dwUser,
                           DWORD dw1, DWORD dw2) {
      printf ("CALLBACK TRAITEMENT\n");
    }
     
     
    void main() {
      UINT uDelay = 100;
      UINT uResolution = 1;
      DWORD dwUser = NULL;
      UINT fuEvent = TIME_PERIODIC;
      MMRESULT FTimerID;
      timeBeginPeriod(1);
      FTimerID = timeSetEvent(uDelay, uResolution, TimeProc, dwUser, fuEvent);
      if(FTimerID == NULL) {
        printf("Failed to generate multimedia timer.\n");
      }
      sleep(1000);
      timeKillEvent(FTimerID);
      timeEndPeriod(1);
    }
    Cela fait ce que je veux (à savoir appeler la fonction toutes les xx ms), mais bêtement je pensais qu'en remplaçant
    le sleep(10000) par ma boucle while j'aurais mon résultat. Pas du tout !

    Si vous pouvez donc m'éclairer ? Je ne crois pas avoir besoin de thread, mais plutôt d'un timer
    (oui j'ai cherché pour ça) qui me dirait est-ce que mon temps est écoulé et dois-je appeler ma fonction ?

    Merci,

    Cordialement.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    J'ai surtout l'impression que vous n'avez pas compris le principe du timer.

    De votre point de vue, l'utilisation d'un timer est la suivante:

    - On enregistre une fonction ( callback ) avec le temps a attendre avant le rappel
    - On fait un tas de trucs
    - Et là, après le temps de rappel enregistrer, le callback, va être appelé ( même si on est en plein milieu d'une tache ).

    Voilà, le principe.Donc, juste remplacer le sleep comme vous l'aviez fait, ne peut pas fonctionner.
    Enfin, le problème, c'est que je n'ai pas le code pour savoir l'endroit possible de l'erreur.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 47
    Par défaut
    Bonjour,

    Merci pour l'éclaircissement. En effet c'est comme tu le décrit que je m'imaginais que ça fonctionnait.
    Pour le code, il n'y en a pas, tout ce que j'ai donné est ce que j'ai comme point de départ. Je souhaiterais
    mettre une boucle vide à la place du sleep qui serait ma tâche principale et en effet toutes les xx ms appeler
    ma fonction. La tache principale n'a pas d'intérêt particulier elle fait de l'affichage, elle peut donc être interrompue.

    Comment faudrait-il procéder pour réaliser quelque chose qui marche, plus ou moins dans cet esprit ?

    Si il y a besoin de plus d'informations n'hésitez pas, merci,

    Cordialement

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 47
    Par défaut
    Bonjour,

    En fait le code que j'ai posté marche et réalise ce que je souhaite.
    C'était simplement ma totale incapacité à utiliser eclipse qui attend la fin du programme
    avant de faire ses impression écran (en tout cas chez moi).
    Mais un test en console à supprimé mes doutes.

    Merci

    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Appel périodique de fonction
    Par ylliw dans le forum C
    Réponses: 34
    Dernier message: 29/01/2008, 17h17
  2. Réponses: 4
    Dernier message: 02/06/2004, 16h35
  3. Appel d'une fonction
    Par jfphan dans le forum ASP
    Réponses: 4
    Dernier message: 14/04/2004, 15h06
  4. A la recherche de l'appel d'une fonction...
    Par karl3i dans le forum C
    Réponses: 3
    Dernier message: 24/09/2003, 12h34
  5. appel xmlservice via fonction javascript
    Par pram dans le forum XMLRAD
    Réponses: 2
    Dernier message: 06/05/2003, 14h24

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