2014-09-11 74 views
0
#include <stdio.h> 
#include <sys/time.h> 
#include <unistd.h> 
#include <signal.h> 


const struct itimerval nak_timer={{20,10} , {20,10} }; 
struct itimerval old_value = {{10,0},{10,0}}; 
sigset_t set; 

int main() 
{ 

    int rc , i=0; 
    void NAKTime(int signal); 
    //Register a signal handler 
    sigemptyset(&set); 
    sigaddset(&set,SIGALRM); 
    sigset(SIGALRM , NAKTime); 
    //Create a Timer 
    rc = setitimer(ITIMER_REAL , &nak_timer,&old_value); 
    if(1 == rc) 
    { 
     printf("\nError in execution of Timer \n"); 
     return 1; 
    } 
    printf("Timer function executed\n"); 
    return 0; 
} 

void NAKTime(int signal) 
{ 
    printf("Entered NAKTime Function()\n"); 
    if(signal == SIGALRM) 
     printf("\nFunction NAKTime Called!!\n"); 
} 

在执行setitimer(...)时,必须调用NAKTime函数。但它没有被调用。我试图用SIGINT等其他信号测试NAKTime,它工作得很好。我不确定我是否在setitimer()函数中丢失了某些东西。SIGALRM信号未生成。在我的代码中,函数NAKTime没有被调用

+1

OT:不要在signal handers中使用'printf()',因为它不能保证异步信号安全。 – alk 2014-09-11 07:59:29

+0

但它适用于SIGINT信号 – 2014-09-11 20:04:18

+0

您的用于NakTime()函数的原型被隐藏在main()函数中,所以在NakTime()函数的声明中没有看到。 – user3629249 2014-09-12 05:06:48

回答

2

您已设置闹钟......但警报响起之前,你的程序退出...

把“睡眠(60)”,如下所示:

printf("Timer function executed\n"); 
sleep(60); 
printf("After sleep\n"); 
return 0;` 

您现在应该看到它的作品。

相关问题