一个有趣的 关于定时器的问题

lysliberty 2004-07-13 11:17:22
#include <sys/time.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>

#define PROMPT "时间已经过去了两秒钟\n\a"

char *prompt=PROMPT;
unsigned int len;

void prompt_info(int signo)
{
write(STDERR_FILENO,prompt,len);
}

void init_sigaction(void)
{
struct sigaction act;
act.sa_handler=prompt_info;
act.sa_flags=0;
sigemptyset(&act.sa_mask);
sigaction(SIGPROF,&act,NULL);
}

void init_time()
{
struct itimerval value;
value.it_value.tv_sec=2;
value.it_value.tv_usec=0;
value.it_interval=value.it_value;
setitimer(ITIMER_PROF,&value,NULL);
}

int main()
{
int i;
len=strlen(prompt);
init_sigaction();
init_time();
while(1)
{
i++;
}
exit(0);
}

程序运行时,每隔两秒终端上就会显示:
"时间已经过去了两秒钟"

但是如果将while循环中的i++;改为printf("hi\n");
终端上就只会显示"hi"
而没有"时间已经过去了两秒钟"
这是为什么,哪位大侠可以解释?
...全文
180 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sink 2004-07-14
  • 打赏
  • 举报
回复
不断的print hi\n这一行就把时间那一句覆盖了把
see22 2004-07-14
  • 打赏
  • 举报
回复
这只是handle signal, 一接收到signal, 就会产生中断,执行相应的函数.
你说改为printf("hi\n"); 程序照样会输出"时间已经过去了两秒钟",
只是hi显示太快了,其他的你看不到而已。
你可以这样实验:
./file_name &> out_file
grep '时间已经过去了两秒钟' out_file
就可以找到了
lysliberty 2004-07-14
  • 打赏
  • 举报
回复
为什么?
lysliberty 2004-07-14
  • 打赏
  • 举报
回复
自己顶一下

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧