新闻  |   论坛  |   博客  |   在线研讨会
Timer Signal Action Handler is not Interrupt!
0750long | 2010-02-06 16:26:56    阅读:1596   发布文章

Timer Signal Action Handler is not Interrupt!

 

 

下面这段程序是Timer定时2秒发送向本进程发送信号,进程收到信号后执行对应的信号处理函数:
act.sa_handler = prompt_info;
 
#include <sys/time.h>
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <string.h>
 
#define PROMPT "Time Passed 2 Seconds"
 
char *prompt = PROMPT;
 
void prompt_info(int signo)
{
printf("%s\r\n", prompt);
}
 
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(void)
{
struct itimerval value;
 
value.it_value.tv_sec = 2;
value.it_value.tv_usec = 10000;
value.it_interval = value.it_value;
setitimer(ITIMER_PROF, &value, NULL);
}
 
int main(void)
{
init_sigaction();
init_time();
while(1)
{
    //sleep(1);
    //getchar();
}
 
return 0;
}
 
/***************************************************/
输出结果:
Time Passed 2 Seconds
Time Passed 2 Seconds
Time Passed 2 Seconds
.........
.........
 
 
如果程序改为
while(1)
{
    sleep(1);
    //getchar();
}
打开while(1)中的任何一句都将导致没有输出,原因是:这两句都将进程挂起,无法响应定时器处理函数。

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客