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