Просмотрите пожалуйста код. Каждые 2 секунды происходит 2 продряд срыва с ожидания семафора sem_wait( &sem0 );
Что нужно дописать чтобы сигнал SIGALRM шел только в обработчик callme(), и не шел в задачу ? Заранее спасибо.
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <semaphore.h>
#include <sys/time.h>
#include <time.h>
#include <unistd.h>
#include <errno.h>
sem_t sem0;
void callme( int signo )
{
sem_post( &sem0 );
}
int main()
{
struct itimerval new_itimerval;
struct itimerval old_itimerval;
struct sigaction new_sigaction;
struct sigaction old_sigaction;
int asd = 0;
sem_init( &sem0, 0, 0);
sigemptyset( &new_sigaction.sa_mask);
new_sigaction.sa_flags = SIGALRM;
new_sigaction.sa_handler = &callme;
if( sigaction( SIGALRM, &new_sigaction, &old_sigaction ) == -1)
{
perror("sigaction\n");
return(1);
}
// current value
new_itimerval.it_value.tv_sec = 3;
new_itimerval.it_value.tv_usec = 0;
// next value
new_itimerval.it_interval.tv_sec = 2;
new_itimerval.it_interval.tv_usec = 0;
if( setitimer( ITIMER_REAL, &new_itimerval, &old_itimerval ) == -1 )
{
perror("setitimer");
return(2);
}
while( asd < 100 )
{
sem_wait( &sem0 );
asd++;
printf("vrggbgbfghbghbhgbh...%d\n", asd );
}
}