Linux中的setitimer功能

时间:2013-10-21 05:14:00

标签: c linux

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

当我执行代码时,我看不到预期的结果。当我在main函数中注释printf( )部分(这是我忙于执行的代码)时,信号句柄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;
} 

0 个答案:

没有答案