Timer Counter في C لحساب المعدل؟
سؤال
تحتاج إلى خوارزمية متوسطة (متحركة ، متداولة) لحساب البتات المتوسطة 5 دقائق التي يتم تمريرها. كل ما يجب أن أعمل معه هو قيمة تراكمية للبتات التي يتم تمريرها.
على سبيل المثال: أبدأ بـ 0 بت ، بعد 5 دقائق ، لدي 10 بت ، وبالتالي فإن متوسطه هو 10 بت. بعد 5 دقائق ، لدي 15 بت ، لذا فإن متوسطه الآن هو 7.5 بت. بعد 5 دقائق أخرى ، لدي 30 بت ، لذا فإن متوسطه الآن هو 10.8 بت.
سؤالي هو ، كيف يمكنني تنفيذ جهاز توقيت Counter في C ++ ، لذا فإنه سيستطلع قيمة البتات في فترات 5 دقائق محددة؟ من الواضح أنني لا أستطيع استخدام تأخير 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. يمكنك عمل خيط ثم وضعه في حلقة لا حصر لها بالنوم () فيه.