Таймер \ Счетчик в С для расчета ставки? - PullRequest
0 голосов
/ 25 марта 2010

Нужен алгоритм скользящего (скользящего, скользящего) среднего для вычисления 5-минутных средних битов, которые передаются. Все, с чем мне нужно работать - это накопленное значение для битов, которые передаются.

Например: я начинаю с 0 бит, через 5 минут у меня есть 10 бит, поэтому мое среднее значение составляет 10 бит. Через 5 минут у меня есть 15 бит, так что теперь мое среднее значение составляет 7,5 бит. Еще через 5 минут у меня есть 30 бит, поэтому мое среднее значение сейчас составляет 10,8 бит.

Мой вопрос: как я могу реализовать таймер \ счетчик в C ++, чтобы он опрашивал значение битов с точными 5-минутными интервалами? Очевидно, я не могу использовать задержку 300 секунд. Но могу ли я сделать таймер в фоновом режиме, который будет запускать событие (опрашивать значение бита) каждые 5 минут?

Ответы [ 2 ]

1 голос
/ 30 марта 2010

Код моего предыдущего ответа

#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 голосов
/ 26 марта 2010

«тупым» решением является использование потоков POSIX.Вы можете создать поток и затем поместить его в бесконечный цикл с включенным sleep ().

...