当前位置: 技术问答>linux和unix
timer & signal 的问题
来源: 互联网 发布时间:2016-04-15
本文导语: 写了个timer和signal的程序 有错误 可以打印 "inside thr_quantum" "inside timer" “inside interrupt” 但是不打印“inside contextswitch” 不知道哪里错了:( 请高人指教 谢谢 /*myhandler: contextswitch*/ void contextswitch(void) { fprintf(...
写了个timer和signal的程序
有错误
可以打印 "inside thr_quantum" "inside timer" “inside interrupt”
但是不打印“inside contextswitch”
不知道哪里错了:(
请高人指教
谢谢
/*myhandler: contextswitch*/
void contextswitch(void)
{
fprintf(stderr, "inside contextswitchn");
.............
.............
}
/* set up myhandler for SIGALRM */
static int th_interrupt(void)
{
fprintf(stderr, "inside interruptn");
struct sigaction act;
act.sa_handler = contextswitch;
act.sa_flags = 0;
return (sigemptyset(&act.sa_mask) || sigaction(SIGALRM , &act, NULL));
}
/* set ITIMER_REAL for 5-ms intervals */
static int th_timer(time_t n)
{
fprintf(stderr, "inside timern");
struct itimerval value;
value.it_interval.tv_sec = 0;
value.it_interval.tv_usec = n;
value.it_value = value.it_interval;
return (setitimer(ITIMER_REAL, &value, NULL));
}
void thr_quantum(int n)
{
fprintf(stderr, "inside quantumn");
if (th_interrupt() == -1) {
perror("Cannot set up interrupt");
exit( 1 );
}
if (th_timer(n) == -1) {
perror("Cannot set up timer");
exit( 1 );
}
}
有错误
可以打印 "inside thr_quantum" "inside timer" “inside interrupt”
但是不打印“inside contextswitch”
不知道哪里错了:(
请高人指教
谢谢
/*myhandler: contextswitch*/
void contextswitch(void)
{
fprintf(stderr, "inside contextswitchn");
.............
.............
}
/* set up myhandler for SIGALRM */
static int th_interrupt(void)
{
fprintf(stderr, "inside interruptn");
struct sigaction act;
act.sa_handler = contextswitch;
act.sa_flags = 0;
return (sigemptyset(&act.sa_mask) || sigaction(SIGALRM , &act, NULL));
}
/* set ITIMER_REAL for 5-ms intervals */
static int th_timer(time_t n)
{
fprintf(stderr, "inside timern");
struct itimerval value;
value.it_interval.tv_sec = 0;
value.it_interval.tv_usec = n;
value.it_value = value.it_interval;
return (setitimer(ITIMER_REAL, &value, NULL));
}
void thr_quantum(int n)
{
fprintf(stderr, "inside quantumn");
if (th_interrupt() == -1) {
perror("Cannot set up interrupt");
exit( 1 );
}
if (th_timer(n) == -1) {
perror("Cannot set up timer");
exit( 1 );
}
}
|
你的主函数可能没等ALARM信号来就退出了。
用下面的试试
int main()
{
thr_quantum(5000);
while (1);
}
用下面的试试
int main()
{
thr_quantum(5000);
while (1);
}
|
1楼的意思是你的main函数中调用thr_quantum()后,可能没有阻塞,造成程序短时间运行结束而没有等到SIGALRM信号.
其他的不用改,在main函数中
int main()
{
thr_quantum(5000);
pause();
}
其他的不用改,在main函数中
int main()
{
thr_quantum(5000);
pause();
}