我在使用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;
}