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 Étienne . Évalué à 2.
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 Sylwa91 . Évalué à 1.
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 !!!!
[^] # Re: Centraliser la gestion des timer
Posté par Étienne . Évalué à 2.
[^] # Re: Centraliser la gestion des timer
Posté par Sylwa91 . Évalué à 1.
Cependant, je tiens à ne pas dépendre d'autre chose que de l'API native Linux.
Je vais donc continuer ma quête et n'opterai pour une solution "maison" qu'en dernier recours.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.