Forum Programmation.c Passage de données au handler d'un timer

Posté par  .
Étiquettes : aucune
0
27
fév.
2008
Bonjour !

J'ai besoin de passer des données au Handler de mon timer.

Avec setitimer, il semble que cela ne soit pas possible puisque la signature du handler à fournir à la structure sigaction est void ( *handler)(int iSignal )

Une idée ?

Merci

Sylvain
  • # Centraliser la gestion des timer

    Posté par  . Évalué à 2.

    Je ne pense pas qu'il y ai de solution au niveau système pour ton problème. Ce que je ferai à ta place c'est d'utiliser un gestionnaire de timer, qui est le seule à recevoir les timer et qui gère une association entre un temps, un callback et une donnée.

    Tu aurai donc une fonction
    void registerTimer(const struct itimerval* timer, void *(*callback)(void*), void* arg);

    Dans une variable statique, tu te fait une liste de
    struct timer_callback
    {
        struct itimerval timer;
        void *(*callback)(void*);
        void* data;
    };


    Qui lui fait l'appel à setitimer, au moment où tu reçoit le SIGALRM (ou le SIGVTALRM ou encore le SIGPROF), tu appel tous les callbacks dont la tempo a expiré avec leur argument et tu les retire de ta liste.

    Si tu fait du code multithread bien sûr il faut faire attention à bien verrouiller ton tableau.
    • [^] # Re: Centraliser la gestion des timer

      Posté par  . Évalué à 1.

      Merci Etienne pour ta réponse.

      1 remarque : c'est étrange que ce genre de problématique ne soit pas gérée par une API système Linux.
      Mon code doit être compilable sous winXp et Linux.
      Sous Windows, l'API existe !!!!

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.