C Linux中的setitimer功能

C Linux中的setitimer功能,c,linux,C,Linux,我在使用setitimer功能时遇到了一些问题 当我执行代码时,我看不到预期的结果。当我在主函数(这是我繁忙执行的代码)中注释而(1)部分时,信号句柄printf()工作。根据我的理解(main()和signal\u handler())都应该以时间切片的方式运行,或者根据Linux调度程序并行运行 有人能帮我调试或纠正我的理解吗 代码如下: void timer_handler (int signum) { printf("...\n"); printf ("Timer e

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

当我执行代码时,我看不到预期的结果。当我在主函数(这是我繁忙执行的代码)中注释
而(1)
部分时,信号句柄
printf()
工作。根据我的理解(
main()
signal\u 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;
} 

您需要提供代码。另外,void timer_handler(int signum){printf(“timer expired%d times\n”,++count);}int main(){Tmr_Init();/*做繁忙的工作。*/while(1){printf(“In main!!\n”);sleep(2);}返回0;}如果您看到上面的代码,如果我对main()函数中的while(1)代码部分进行注释,则信号处理程序的功能非常完美。您的问题需要添加更多代码。不,我的意思是您需要通过编辑将代码放入问题本身。不要在评论中发布它们。