2010-03-25 3 views
0

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

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

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

+1

Какая ОС? Ядро или пользовательское приложение? –

+0

Это для платы PowerPC. – jiake

ответ

1

код на предыдущий ответ

#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

Я не могу использовать метод pthread, потому что в базе кода уже есть что-то, написанное как счетчик. Мне просто нужно это найти. Однако я изучу ваш код, чтобы он помог мне лучше понять, как работают таймеры. Большое спасибо! – jiake

0

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

+0

Можете ли вы подробно остановиться на этом? – jiake