繁体   English   中英

代码未使用多个信号处理程序

[英]Code not making using of more than one signal handler

我有要用于处理不同信号的代码。 我不知道为什么它永远不会进入timer_handler2()。 它只是停留在timer_handler()上。 有人可以告诉我我在做什么错

#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <sys/time.h>
#include <string.h>

struct timeval theTime;
static int count = 0;

void timer_handler2(int signum) {   
    printf("timer 2 expired %d times\n", ++count);  
}

void timer_handler(int signum) {    
    printf("timer 1 expired %d times\n", ++count);  
}

void timer_handler3(int signum) {

    printf("timer 3 expired %d times\n", ++count);
}

int main() {
    struct itimerval timer, timer2, timer3, got;    

    signal(SIGVTALRM, timer_handler2);
    signal(SIGALRM, timer_handler);
    signal(SIGPROF, timer_handler3);

    /* ... and every 1000 msec after that.  */
    timer2.it_interval.tv_sec = 1;
    timer2.it_interval.tv_usec = 0;
    /* Configure the timer to expire after 1000 msec...  */
    timer2.it_value.tv_sec = 1;
    timer2.it_value.tv_usec = 0;

    /* ... and every 1000 msec after that.  */
    timer.it_interval.tv_sec = 0;
    timer.it_interval.tv_usec = 0;
    /* Configure the timer to expire after 1000 msec...  */
    timer.it_value.tv_sec = 1;
    timer.it_value.tv_usec = 250000;

    /* ... and every 1000 msec after that.  */
    timer3.it_interval.tv_sec = 1;
    timer3.it_interval.tv_usec = 0;
    /* Configure the timer to expire after 1000 msec...  */
    timer3.it_value.tv_sec = 1;
    timer3.it_value.tv_usec = 0;

    /* Start a real timer. It counts down whenever this process is
     executing.  */
    setitimer(ITIMER_VIRTUAL, &timer2, NULL);
    setitimer(ITIMER_REAL, &timer, NULL);
    setitimer(ITIMER_PROF, &timer3, NULL);

    int counter = 0;
    while (1) {
        sleep(1);
        counter++;
    }

    return 0;
}

您让程序运行多长时间? ITIMER_VIRTUAL仅在程序实际使用处理器时间时才递减。 由于您的程序大部分时间都处于睡眠状态,因此不会占用太多处理器时间。 要进行验证,请使用unix“时间”命令(或与您的操作系统等效的命令)查看程序使用的实际,用户和系统时间。 我敢打赌,只有实时时间才能激活计时器。

您可以尝试将VIRTUAL和PROF计时器间隔减小很多,或者做一些不会阻塞无限循环的操作(例如:删除sleep(1))。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM