原创 Timer Signal Action Handler is not Interrupt!

2010-1-22 17:09 2430 2 2 分类: MCU/ 嵌入式
下面这段程序是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)中的任何一句都将导致没有输出,原因是:这两句都将进程挂起,无法响应定时器处理函数。


PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
2
关闭 站长推荐上一条 /3 下一条