程序中不断读取实时数据

/*
//读取实时数据
StrData ReadRealData(int beginTime ,int endTime);

//读取实时时间
StrTime ReadRealTime();
*/

//我们从实时库中每秒中读一次数据,这就需要我们要保证数据的连贯性。



void func()
{
    StrTime  newTime;
    StrTime  oldTime;
    memset(&newTime,0,sizeof(StrTime);//局部变量一定要先初始化
    memset(&oldTime,0,sizeof(StrTime);//局部变量一定要先初始化
    StrData  RealData;
    vector<StrData> VData;
    while(1)
    {
         newTime = ReadRealTime();
         if(newTime.sec<=oldTime.sec)
            {
                usleep(200);//因为我们是取1s的数据,故此处延时不能用sleep函数
                continue;
            } 
           oldTime = newTime;

        
 RealData = ReadRealData(newTime.sec-11 ,newTime.sec-10);//实时库中可以取比当前时间早1-2min中的数,此处取早11秒的数

    VData.pushbach(RealData);
    //do sth.
    



  
    }
   

    

}

小结:

1)以上程序通过两个时间,来保证时间的连续性。

2)oldTime一定要初始化,如未初始化,oldTime.sec可能会是一个很大的数,这样就可能导致if(newTime.sec<=oldTime.sec)一直成立,程序进入死循环。

3)上述程序存在一个问题,就是200us就读取一次实时时间函数ReadRealTime(),这样太频繁了。我们修正为以下情况:

/*
//读取实时数据
StrData ReadRealData(int beginTime ,int endTime);

//读取实时时间
StrTime ReadRealTime();
*/

//我们从实时库中每秒中读一次数据,这就需要我们要保证数据的连贯性。



void func()
{
    StrTime  newTime;
    StrTime  oldTime;
    memset(&newTime,0,sizeof(StrTime);//局部变量一定要先初始化
    memset(&oldTime,0,sizeof(StrTime);//局部变量一定要先初始化
    StrData  RealData;
    vector<StrData> VData;
    while(1)
    {
        //添加gettimeofday
        struct timeval time_start,time_end;
        gettimeofday(&time_start,NULL);




         newTime = ReadRealTime();
         if(newTime.sec<=oldTime.sec)
            {
                usleep(200);//因为我们是取1s的数据,故此处延时不能用sleep函数
                continue;
            } 
           oldTime = newTime;

        
 RealData = ReadRealData(newTime.sec-11 ,newTime.sec-10);//实时库中可以取比当前时间早1-2min中的数,此处取早11秒的数

    VData.pushbach(RealData);
    //do sth.
    



    //添加gettimeofday
    gettimeofday(&time_end,NULL);
    int spanTime = time_end.tv_sec - time_start.sec;
    spanTime = spanTime*1000000 + time_end.tv_usec - time_start.tv_usec;
    if(1000000 - spanTime >0)
        usleep(1000000 - spanTime); //这就保证了不会频繁的读取实时库。

  
    }
   

    

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值