• # Centraliser la gestion des timer

    Posté par . En réponse au message Passage de données au handler d'un timer. É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.