質問

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

例えば:0 ビットから開始し、5 分後には 10 ビットになるので、平均は 10 ビットになります。5 分後、15 ビットになったので、平均は 7.5 ビットになります。さらに 5 分後、30 ビットになったので、現在の平均は 10.8 ビットになります。

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

役に立ちましたか?

解決

前回の回答のコード

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

他のヒント

「ダム」ソリューションは、POSIXスレッドを使用することです。あなたがスレッドを作成して、その中にスリープ()で無限ループにそれを置くことができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top