0

渡される5分間の平均ビットを計算するには、実行中(移動、ローリング)の平均アルゴリズムが必要です。処理する必要があるのは、渡されるビットの累積値だけです。

例:私は0ビットから始め、5分後、10ビットがあるので、平均は10ビットです。5分後、私は15ビットを持っているので、今の私の平均は7.5ビットです。さらに5分後、私は30ビットを持っているので、私の平均は10.8ビットになりました。

私の質問は、正確に5分間隔でビット値をポーリングするようにC++でtimer\ counterを実装するにはどうすればよいですか?もちろん、300秒の遅延は使用できません。しかし、5分ごとにイベントを発生させる(ビット値をポーリングする)だけのタイマーをバックグラウンドで作成できますか?

4

2 に答える 2

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;
}
于 2010-03-30T14:45:30.270 に答える
0

「愚かな」解決策は、POSIX スレッドを使用することです。スレッドを作成し、sleep() を使用して無限ループに入れることができます。

于 2010-03-25T22:42:54.513 に答える