C中的定时器\计数器用于速率计算?

时间:2010-03-25 20:23:50

标签: c timer counter average rate

需要一个运行(移动,滚动)平均算法来计算传入的5分钟平均位数。我必须使用的是传入的位的累积值。

例如:我从0位开始,5分钟后,我有10位,所以我的平均值是10位。 5分钟后,我有15位,所以现在我的平均值是7.5位。另外5分钟后,我有30位,所以现在我的平均值是10.8位。

我的问题是,如何在C ++中实现一个计时器\计数器,以便它以5分钟的间隔轮询位值?显然我不能使用延迟300秒。但是我可以在后台制作一个定时器,它只会每隔5分钟触发一次事件(轮询比特值)吗?

2 个答案:

答案 0 :(得分:1)

我以前的答案的代码

#define REENTRANT
//The above is neccessary when using threads. This must be defined before any includes are made
//Often times, gcc -DREENTRANT is used instead of this, however, it produces the same effect

#include <pthread.h>

char running=1;

void* timer(void* dump){
    unsigned char i=0;
    while(running){
        for(i=0;i<300 && running;i++){
            sleep(1);//so we don't need to wait the 300 seconds when we want to quit
        }
        if(running)
           callback();//note that this is called from a different thread from main()
    }
    pthread_exit(NULL);
}

    int main(){
    pthread_t thread;
    pthread_create(&thread,NULL,timer,NULL);
    //do some stuff
    running=0;
    pthread_join(thread,NULL);//we told it to stop running, however, we might need to wait literally a second
    pthread_exit(NULL);
    return 0;
}

答案 1 :(得分:0)

“哑”解决方案是使用POSIX线程。你可以创建一个线程,然后把它放在一个带有sleep()的无限循环中。