gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:04:43 30 4
gpt4 key购买 nike

我有一个系统,其 66% 的时间都花在 time(NULL) 调用上。

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

上下文:我正在玩 C++ 的 Protothread。试图用状态机模拟线程。所以因此我不能使用 native 线程。

这是标题:

#ifndef __TIMER_H__
#define __TIMER_H__

#include <time.h>
#include <iostream>

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)

最佳答案

我假设您是在某个循环中调用它,否则效率非常高。

您可以做的是计算在时间返回值发生变化之前循环经过了多少次迭代。

然后在您再次经历那么多次迭代之前不要再次调用它。

如果您发现自己偏离方向,您可以向上或向下动态调整此计数,但您应该能够对其进行设计,使其平均每秒调用一次 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
}
}

}

关于c++ - 在 C++ 中优化时间(NULL)调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/691347/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com