linux定时函数
1、alarm函数 signal函数 实现秒级定时
alarm也称为闹钟函数,设置一个定时器,当时间到以后,执行信号函数
头文件
#include<unistd.h>
函数原型
unsigned int alarm(unsigned int seconds);
void (signal(int signum,void( handler)(int)))(int);
拆分开
typedef void (*sig_t) (int);
sig_t signal(int sig, sig_t func);
2、
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
unsigned int averag_filter(unsigned int input);
void sigalrm_fn(int sig)
{
int tmp;
tmp = averag_filter(10);
printf("timer run%d\n",tmp);
alarm(1);
}
int main()
{
signal(SIGALRM, sigalrm_fn);
alarm(1);
while(1);
// printf("main run\n");
//pause();
}
unsigned int averag_filter(unsigned int input)
{
const char cnt = 5;//取多少次数据的平均值 数值越大,取的数据越多,延迟越大
static unsigned int serial = 0,last_out = 0;
unsigned int output = 0;
static unsigned long cal_tmp = 1;
serial++;//累加输入次数
if(serial == cnt)//取到cnt次数据计算结果
{
serial = 0; //计数清零
cal_tmp += input;
output = cal_tmp / cnt;//计算平均值
last_out = output; //更新记录输出值
cal_tmp = 0; //总和清零
}
else
{
cal_tmp += input; //累加每次输入
output = last_out;//没加到cnt次,输出上次计算的结果
}
return output;//输出结果
}
2、setitimer函数
当设置时间到以后自动跳转到信号函数执行
函数原型
int setitimer(int which, const struct itimerval *new_value,
struct itimerval *old_value);
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/time.h>
void timer_fun()
{
static count = 0;
printf("timer run %d\n", count++);
}
int main(int argc, char **argv)
{
//初始化信号函数
struct sigaction act;
act.sa_handler = timer_fun; //设置处理信号的函数
act.sa_flags = 0;
sigemptyset(&act.sa_mask);
sigaction(SIGPROF, &act, NULL);//时间到发送SIGROF信号
//初始化定时时间
struct itimerval val;
val.it_value.tv_sec = 1; //1秒后启用定时器
val.it_value.tv_usec = 0;
val.it_interval = val.it_value; //定时器间隔为1s
setitimer(ITIMER_PROF, &val, NULL);
while(1);
return 0;
}