Timer contador em c para cálculo da taxa?
Pergunta
Precisa de um algoritmo médio em execução (movimentado, rolante) para calcular os bits médios de 5 minutos que são transmitidos. Tudo o que tenho que trabalhar é um valor acumulativo para os bits que são transmitidos.
Por exemplo: começo com 0 bits, 5 minutos depois, tenho 10 bits, então minha média é de 10 bits. 5 minutos depois, tenho 15 bits, então agora minha média é de 7,5 bits. Outros 5 minutos depois, tenho 30 bits, então minha média agora é de 10,8 bits.
Minha pergunta é: como posso implementar um contador de timer em C ++ para que ele pesquise o valor de bits em intervalos exatos de 5 minutos? Obviamente, não posso usar o atraso 300 segundos. Mas posso fazer um cronômetro em segundo plano que apenas demitisse um evento (pesquisa o valor do bit) a cada 5 minutos?
Solução
O código para minha resposta anterior
#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;
}
Outras dicas
A solução "idiota" é usar threads POSIX. Você pode fazer um fio e depois colocá -lo em um loop infinito com o sono () nele.