您的位置:首页 > 运维架构 > Linux

Linux C语言实时监测某变量是否变化,一段时间未变化,再次发送

2016-11-22 20:25 232 查看
描述下大致功能:需要监测某个变量或整个函数返回值是否发生变化,若发生了变化,将变化的值传出去,若5分钟内该变量值还没有变化,变量也会继续传出去。

用处:监测某个预警值,发生警告了就处理,但是又不想一直发送,发生了新的告警信息才发送,如果同一个告警信息,一段时间没有处理,需要再次发生该告警信息,及时处理告警。

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int monitor_var();
void main()
{
int monitor;
int i=0;
static int monitor_var_keep;
int start,finish;
float total_time=0;
while(1)
{
while(1)
{
start =time(NULL);//记录本次监测变量开始的时间
monitor = monitor_var();
/*monitor_var_keep=0是因为第一次执行或者检测monitor是否发生变化*/
if((monitor_var_keep==0)|(monitor!=monitor_var_keep))
{
monitor_var_keep = monitor;
break;
}
finish = time(NULL);//记录本次监测变量结束时间
total_time +=(float)(finish-start);//记录监测变量总时间
printf("total_time is %f\n",total_time);
if(total_time>=3.0)//当监测3s没有发生变化,总时间清零,并退出循环。
{
total_time=0;
break;
}

}//end while
/*只有退出上一层while循环才会执行后续的3个打印语句。*/
printf("monitor is %d\n",monitor);
printf("monitor_var_keep is %d\n",monitor_var_keep);

/*此处根据需要写处理监测变量的函数,例如进行UDP通信,将数据发送到服务端*/

printf("recycle %d time\n",++i);
}//end while。

}//end main。

int monitor_var()
{
int i=1;
srand(time(NULL));
i = rand()%3+1;
sleep(1);
printf("i = %d\n",i);
return i;
}






从执行的结果可以看出第一次执行 i =2,会退出第一层while循环(执行了3个打印语句),第二次第三次也因为i的值确实发生了变化,退出了while循环。

第四次i=3,与上一次结果一样,并没有变化,而且时间也少于3s,没有退出,继续监测。

从图上看“recycle 8 time”后三次执行结果,i =3没有变化,但是第三次i = 3的时候,超过了规定时间3s没有变化,再发生一次监测变量,以便处理。

综上结果分析,算是符合了要求。

/本人当时做UDP数据传输时,需要实时监测trap PDU是否发生变化。如果一段时间没有处理该trap,就继续发送!/

/有问题欢迎指正。。。/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: