当前位置:  开发笔记 > 编程语言 > 正文

在c ++中优化时间(NULL)调用

如何解决《在c++中优化时间(NULL)调用》经验,为你挑选了2个好方法。

我有一个系统,它花费66%的时间在一个时间(NULL)调用.

有没有办法缓存或优化此调用?

上下文:我正在使用Protothread for c ++.尝试使用状态机模拟线程.所以我不能使用本机线程.

这是标题:

#ifndef __TIMER_H__
#define __TIMER_H__

#include 
#include 

class Timer
{
private:
    time_t initial;
public:
    Timer();
    unsigned long passed();
};

#endif

和源文件:

#include "Timer.h"

using namespace std;

Timer::Timer()
{
    initial = time(NULL);
}

unsigned long Timer::passed()
{
    time_t current = time(NULL);
    return (current - initial);
}

更新:最终解决方案!cpu在某个地方循环,如果我把它们用在正确的地方.毕竟这并不是那么糟糕.

#define start_timer() timer_start=time(NULL)
#define timeout(x)   ((time(NULL)-timer_start)>=x)

Paul Dixon.. 8

我认为你在一些循环中调用它,否则效率很高.

你可以做的是保持循环在时间返回值变化之前经历的迭代次数.

然后不要再次调用它,直到你再次经历了那么多次迭代.

如果您发现自己正在漂泊,可以向上或向下动态调整此计数,但您应该能够设计它,以便平均每秒调用一次time().

这里有一个关于你如何做到这一点的大致想法(这个主题有很多变化)

int iterations_per_sec=10; //wild guess
int iterations=0;

while(looping)
{
    //do the real work

    //check our timing
    if (++iterations>iterations_per_sec)
    {
        int t=time(NULL);
        if (t==lasttime)
        {
            iterations_per_sec++;
        }
        else
        {
            iterations_per_sec=iterations/(t-lasttime);
            iterations=0;
            lastime=t;

            //do whatever else you want to do on a per-second basis
        }
    }

}


Johannes Sch.. 6

这听起来很多,因为它time只有1秒的精度.听起来你经常这么称呼它.一个可能的改进是可能每500ms只调用一次.所以它仍会每秒都会出现.

因此,不是每秒调用100次,而是每隔500毫秒启动一个定时器,占用当前时间并将其存储为整数.然后,每秒读取整数100次.



1> Paul Dixon..:

我认为你在一些循环中调用它,否则效率很高.

你可以做的是保持循环在时间返回值变化之前经历的迭代次数.

然后不要再次调用它,直到你再次经历了那么多次迭代.

如果您发现自己正在漂泊,可以向上或向下动态调整此计数,但您应该能够设计它,以便平均每秒调用一次time().

这里有一个关于你如何做到这一点的大致想法(这个主题有很多变化)

int iterations_per_sec=10; //wild guess
int iterations=0;

while(looping)
{
    //do the real work

    //check our timing
    if (++iterations>iterations_per_sec)
    {
        int t=time(NULL);
        if (t==lasttime)
        {
            iterations_per_sec++;
        }
        else
        {
            iterations_per_sec=iterations/(t-lasttime);
            iterations=0;
            lastime=t;

            //do whatever else you want to do on a per-second basis
        }
    }

}



2> Johannes Sch..:

这听起来很多,因为它time只有1秒的精度.听起来你经常这么称呼它.一个可能的改进是可能每500ms只调用一次.所以它仍会每秒都会出现.

因此,不是每秒调用100次,而是每隔500毫秒启动一个定时器,占用当前时间并将其存储为整数.然后,每秒读取整数100次.

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有