Fonction de synchronisation Linux
1, la fonction de signal de fonction d'alarme réalise une
alarme de synchronisation de deuxième niveau , également appelée fonction d'alarme, définit une minuterie, lorsque le temps est écoulé, exécute la fonction de signal
Fichier d'en-tête
#include <unistd.h>
Fonction prototype
unsigned int alarm (unsigned int secondes);
void ( signal (int signum, void ( handler) (int))) (int);
split
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. Fonction Setitimer
当设置时间到以后自动跳转到信号函数执行
函数 原型
int setitimer (int qui, 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;
}