レート計算用の C の Timer\Counter?
質問
渡される 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スレッドを使用することです。あなたがスレッドを作成して、その中にスリープ()で無限ループにそれを置くことができます。
所属していません StackOverflow