سؤال

تحتاج إلى خوارزمية متوسطة (متحركة ، متداولة) لحساب البتات المتوسطة 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. يمكنك عمل خيط ثم وضعه في حلقة لا حصر لها بالنوم () فيه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top