Domanda

Hai bisogno di una corsa (in movimento, a rotazione) algoritmo di media per calcolare i bit in media di 5 minuti che sono passati in. Tutto quello che devo lavorare è un valore cumulativo per i bit che vengono passati in.

Ad esempio: parto da 0 bit, 5 minuti più tardi, ho 10 bit, quindi la mia media è di 10 bit. 5 minuti più tardi, ho 15 bit, così ora la mia media è di 7,5 bit. Un altro 5 minuti più tardi, ho 30 bit, quindi la mia media è ora di 10,8 bit.

La mia domanda è, come posso implementare un timer \ contatore in C ++ quindi sarebbe il polling del valore di bit in precisi intervalli di 5 minuti? Ovviamente non posso usare ritardare 300 secondi. Ma posso fare un timer in background che sarebbe attiva una sola un evento (il polling il valore bit) ogni 5 minuti?

È stato utile?

Soluzione

Il codice per la mia risposta precedente

#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;
}

Altri suggerimenti

La soluzione "stupido" è quello di utilizzare i thread POSIX. Si può fare un filo e poi metterlo in un ciclo infinito con il sonno () in esso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top