Die Weitergabe von Benutzerdaten mit timer_create
Ich bin mit timer_create
zum erstellen eines Timers in Linux. Der callback-Prototyp:
static void TimerHandlerCB(int sig, siginfo_t *extra, void *cruft)
Wie kann ich Benutzer Daten, so dass ich die gleiche in der callback-wird aufgerufen, nachdem timer-Ablauf.
Hier ist mein Beispielcode:
int RegisterTimer(iDiffInTime)
{
struct sigaction sa;
sigemptyset(&sa.sa_mask);
sa.sa_flags = SA_SIGINFO; /*call our handler*/
sa.sa_sigaction = TimerHandlerCB;/*Event handler to be called after timer expires*/
if(sigaction(SIGRTMAX, &sa, NULL) < 0)
{
perror("sigaction");
return 1;
}
//Setup the timer
sigevent sigev;
timer_t timerid = 0;
memset(&sigev, 0, sizeof(sigev));
sigev.sigev_notify = SIGEV_SIGNAL;
sigev.sigev_signo = SIGRTMAX;
sigev.sigev_value.sival_ptr = &timerid;
timer_t timerid;
if (timer_create(CLOCK_REALTIME, &sigev, &timerid) == 0)
{
printf("Timer created\n");
struct itimerspec itval, oitval;
itval.it_value.tv_sec = iDiffInTime * 1000;
itval.it_value.tv_nsec = 0;
itval.it_interval.tv_sec = 0;
itval.it_interval.tv_nsec = 0;
//Populate handles required in TimerCallback
Display_Handle hDisplay = ......//
Buffer_Handle hBuf = .....//
if (timer_settime(timerid, 0, &itval, &oitval) != 0)
{
perror("time_settime error!");
return 1;
}
}
else
{
perror("timer_create error!");
}
return 0
}
Wo gebe ich hDisplay
& hBuf
so, dass ich empfangen kann Sie wieder in TimerHandlerCB
?
- C oder C++? Ein Pick.
- Geret'kal: es ist ein legacy-code mit prozeduralen C++ 😉
- Einstellung der
.sival_ptr
an die Adresse einer lokalen Variablen ist wahrscheinlich nicht eine gute Idee.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du tust es bereits:
Können Sie angeben, nichts drin (Angabe
&timerid
ist üblich, zu unterscheiden zwischen mehrere Timer, ist aber nicht erforderlich). Jetzt in Ihrer handler:Zitat von TLPI
Müssen Sie entweder :