当前位置: 技术问答>linux和unix
一个有趣的 关于定时器的问题
来源: 互联网 发布时间:2015-07-04
本文导语: #include #include #include #include #include #define PROMPT "时间已经过去了两秒钟na" char *prompt=PROMPT; unsigned int len; void prompt_info(int signo) { write(STDERR_FILENO,prompt,len); } void init_sigaction(void) { struct sigaction act; ...
#include
#include
#include
#include
#include
#define PROMPT "时间已经过去了两秒钟na"
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("hin");
终端上就只会显示"hi"
而没有"时间已经过去了两秒钟"
这是为什么,哪位大侠可以解释?
#include
#include
#include
#include
#define PROMPT "时间已经过去了两秒钟na"
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("hin");
终端上就只会显示"hi"
而没有"时间已经过去了两秒钟"
这是为什么,哪位大侠可以解释?
|
这只是handle signal, 一接收到signal, 就会产生中断,执行相应的函数.
你说改为printf("hin"); 程序照样会输出"时间已经过去了两秒钟",
只是hi显示太快了,其他的你看不到而已。
你可以这样实验:
./file_name &> out_file
grep '时间已经过去了两秒钟' out_file
就可以找到了
你说改为printf("hin"); 程序照样会输出"时间已经过去了两秒钟",
只是hi显示太快了,其他的你看不到而已。
你可以这样实验:
./file_name &> out_file
grep '时间已经过去了两秒钟' out_file
就可以找到了