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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top