2010-03-25 28 views
0

Besoin d'un algorithme de moyenne (déplacement, roulement) pour calculer les bits de moyenne de 5 minutes qui sont passés. Tout ce que je dois travailler est une valeur cumulée pour les bits qui sont passés.Minuterie Compteur en C pour le calcul du débit?

Par exemple: Je commence avec 0 bits, 5 minutes plus tard, j'ai 10 bits, donc ma moyenne est de 10 bits. 5 minutes plus tard, j'ai 15 bits, alors maintenant ma moyenne est de 7,5 bits. Un autre 5 minutes plus tard, j'ai 30 bits, donc ma moyenne est maintenant de 10,8 bits.

Ma question est, comment puis-je implémenter un timer \ counter en C++ afin qu'il interroge la valeur des bits dans des intervalles exacts de 5 minutes? Évidemment je ne peux pas utiliser le délai 300 secondes. Mais puis-je faire une minuterie en arrière-plan qui ne ferait que déclencher un événement (interroger la valeur du bit) toutes les 5 minutes?

+1

Quel système d'exploitation? Kernel ou application utilisateur? –

+0

C'est pour une carte PowerPC. – jiake

Répondre

1

Le code à ma réponse précédente

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

Je ne peux pas utiliser la méthode pthread parce que la base de code a déjà quelque chose écrit en guise de compteur. J'ai juste besoin de trouver ça. Cependant, j'étudierai votre code afin de mieux comprendre le fonctionnement des minuteurs. Merci beaucoup! – jiake

0

La solution «bête» consiste à utiliser des threads POSIX. Vous pouvez créer un fil et le placer dans une boucle infinie avec sleep().

+0

Pouvez-vous élaborer là-dessus? – jiake