下面这段程序是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)中的任何一句都将导致没有输出,原因是:这两句都将进程挂起,无法响应定时器处理函数。
文章评论(0条评论)
登录后参与讨论