Timer en C simple, portable sur Unix

Philippe49Philippe49 Membre
02:35 modifié dans Xcode et Developer Tools #1
J'ai besoin dans un programme C sans XCode, sans librairie complémentaire, de créer un timer. J'ai une première solution , mais qui ne me satisfait pas entièrement car je ne vois pas comment faire plusieurs timers avec ce principe :

setitimer( ITIMER_REAL , &amp;timerInterval , NULL ); <br />	signal ( SIGALRM, timerFire );<br />	// avec éventuellement une boucle de répétitions dans la fonction timerFire<br />


Une autre solution serait de bricoler avec des pthread, et une boucle ...


Ne trouvant rien comme doc sur ce sujet, avez-vous une idée, une solution, une référence classique à  ce sujet ?

Réponses

  • Philippe49Philippe49 Membre
    juin 2009 modifié #2
    dans 1246292937:

    Une autre solution serait de bricoler avec des pthread, et une boucle ...

    Si cela intéresse un lecteur futur :

    int N=2009;<br />	pthread_t timer=setupTimer(timerFire,.1,10,&amp;N);<br />
    


    et les prototypes (perso, il faut les coder) :
    <br />	typedef void (*timerFunction_t) (void *);<br />	pthread_t setupTimer(timerFunction_t fireFunction,double timeInterval,int repeatCount,void * info) ;<br />	void * __scheduleTimer ( void * info );<br />	void timerFire ( void * info );<br />
    

  • AliGatorAliGator Membre, Modérateur
    02:35 modifié #3
    Je savais pas que pthread savait gérer les timers aussi o_O
    Moi j'aurais en effet plus regardé du côté de alarm() mais en effet ça te limite à  une seule alarme... Bon à  savoir ;)
  • schlumschlum Membre
    02:35 modifié #4
    pthread gère tout un tas de trucs... ("man pthread").
    Par contre, ce n'est pas du tout équivalent à  un timer Cocoa qui est basé sur la boucle d'events (runloop), et qui fonctionne dans le thread principal...
  • Philippe49Philippe49 Membre
    02:35 modifié #5
    Pour ma culture perso, tu vois ça comment une CFRunloopRef en C ?
  • AliGatorAliGator Membre, Modérateur
    02:35 modifié #6
    Oh! Oserais-je te suggérer de lire la doc:) ;)
  • schlumschlum Membre
    02:35 modifié #7
    dans 1246524169:

    Pour ma culture perso, tu vois ça comment une CFRunloopRef en C ?


    CF est en C  ;)
    C'est simplement une boucle de gestion d'événements comme on en voit avec pas mal de technologies comme SDL, OpenGL, ncurses, qt, wxwidgets etc.
  • Philippe49Philippe49 Membre
    02:35 modifié #8
    dans 1246539340:

    CF est en C  ;)
    C'est simplement une boucle de gestion d'événements comme on en voit avec pas mal de technologies comme SDL, OpenGL, ncurses, qt, wxwidgets etc.

    Merci, cela confirme le modèle que j'avais en tête.



    dans 1246538394:

    Oh! Oserais-je te suggérer de lire la doc:) ;)


    Damned, je suis fait ! 
    Par contre, il me va falloir relire plusieurs fois pour voir comment on peut générer un "synchronous event" dans ces conditions. Je n'ose croire à  un simple test sur le temps écoulé , et si on imagine un event auquel réagit la boucle d'événements, on ne fait que déplacer la question : qu'est-ce qui génère cet événement à  une date donnée

    Bon je plonge dans la lecture ...
       
  • schlumschlum Membre
    02:35 modifié #9
    Sisi, c'est bien un simple test sur la date...

    D'ailleurs la doc met bien en garde :
    Timers work in conjunction with run loops. To use a timer effectively, you should be aware of how run loops operate"see NSRunLoop and Run Loops. Note in particular that run loops retain their timers, so you can release a timer after you have added it to a run loop. Moreover, timers may not fire exactly when scheduled.
Connectez-vous ou Inscrivez-vous pour répondre.