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

描述下大致功能:需要监测某个变量或整个函数返回值是否发生变化,若发生了变化,将变化的值传出去,若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,就继续发送!/
/有问题欢迎指正。。。/

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值