需要一个运行(移动,滚动)平均算法来计算传入的5分钟平均位数。我必须使用的是传入的位的累积值。
例如:我从0位开始,5分钟后,我有10位,所以我的平均值是10位。 5分钟后,我有15位,所以现在我的平均值是7.5位。另外5分钟后,我有30位,所以现在我的平均值是10.8位。
我的问题是,如何在C ++中实现一个计时器\计数器,以便它以5分钟的间隔轮询位值?显然我不能使用延迟300秒。但是我可以在后台制作一个定时器,它只会每隔5分钟触发一次事件(轮询比特值)吗?
答案 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()的无限循环中。