0

我在使用setitimer功能时遇到了一些问题。

当我执行代码时,我看不到预期的结果。printf( )当我在 main 函数中注释while(1)部分(这是我忙于执行代码)时,信号句柄起作用。据我了解, (main( )signal_handler()) 都应该以时间切片方式运行或并行运行,具体取决于 Linux 调度程序。

谁能帮助我调试或纠正我的理解?

这是代码:

void timer_handler (int signum) {

    printf("...\n"); 
    printf ("Timer expired %d times\n", ++count);
} 

void Tmr_Init(void) {

    struct sigaction sa;
    struct itimerval timer; 

    memset (&sa, 0, sizeof (sa));
    sa.sa_handler = &timer_handler; 
    sigaction (SIGPROF, &sa, NULL);timer.it_value.tv_sec = 2;

    timer.it_value.tv_usec = 0;
    timer.it_interval.tv_sec = 1;
    timer.it_interval.tv_usec = 0;

    setitimer (ITIMER_PROF, &timer, NULL);
} 

int main () {

    Tmr_Init(); 

    /* Do busy work. */
    while (1) {
        printf("In main!!\n"); 
        sleep(2);
    }

    return 0;
} 
4

0 回答 0