LINUX.ORG.RU

Подскажите (sigaction + timer)


0

0

Подскажите пожалуйста кто знает.
Проблема такая:
Приведенная ниже программа выполняется не корректно.
А именно - пользовательские данные (123456) в Caller не передаются,
а передается какой-то бред...
Что я не так сделал? Это пример из книг (Чан и Робачевский).
Система RH-7.0 (kernel 2.2.16-22(2.2.18.pre2), glibc-2.2.12)
p.s. Проверку на ошибки не напечатал специально для краткости.


static void Caller(int _signo, siginfo*evp, void*)
{
int XXX = evp->si_value.sival_int;
cerr<<XXX<<endl;
};

void main()
{
struct sigevent sigx;
struct sigaction sigv;
struct itimerspec val;
timer_t timer_id;

sigemptyset( &sigv.sa_mask );
sigv.sa_flags = SA_SIGINFO;
sigv.sa_sigaction = Caller;

sigaction( SIGUSR1, &sigv, 0);

sigx.sigev_notify = SIGEV_SIGNAL;
sigx.sigev_signo = SIGUSR1;
sigx.sigev_value.sival_int = 123456;

timer_create(CLOCK_REALTIME, &sigx, &timer_id);

val.it_value.tv_sec = 1;
val.it_value.tv_nsec = 0;
val.it_interval.tv_sec = 1;
val.it_interval.tv_nsec = 0;

timer_settime( timer_id, 0, &val, 0);

while(1);

timer_delete( timer_id );
}

iss

anonymous

В settime второй параметр это абсолютное или относительное время. Время ты дал 1 сек, но ты уверен что 0 это относительно текущего а не абсолютный счетчик? У меня, кстати, вообще на RH 6.2 этот пример отказался компиляться и я ни в одном хедере settime не нашел.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.