1. Си / Говнокод #27535

    −1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    void* execute_thread(void* arg)
    {
        int i;
        int interval;
    
        //Период контроля времени задаётся с точностью в 10мс.
        //Контролировать в данной реализации таймера точность в 1мс не имеет смысла,
        //так как это почти не возможно и, как правило, не требуется,
        //а крутить проверку таймеров с такой частотой только "пожерать" ресурсы процессора.
    
        struct timespec sleep_period = {0,9999999}; //Период, почти 10 мс
    
        do {
            for(i=0;i<n_timers;i++){
                if(timers[i]->enable == false){
                    //Если таймер не активный, то присваиваем ему начальное значение
                    clock_gettime(CLOCK_REALTIME, &timers[i]->time_before);
                }
            }
            //Засыпаем на 10мс
            nanosleep(&sleep_period , NULL);
    
            for(i=0;i<n_timers;i++){
                if(timers[i]->enable == true){
                    //Получаем текущее значение времени.
                    clock_gettime(CLOCK_REALTIME, &timers[i]->time_after);
                    //Вычисляем прошедшее время ожидания
                    interval = ((timers[i]->time_after.tv_sec-timers[i]->time_before.tv_sec)*1000000000 
                                +timers[i]->time_after.tv_nsec-timers[i]->time_before.tv_nsec)/1000000; 
                    //Проверяем условие, если ОК, то обновляем время и формируем событие
                    if(interval >= timers[i]->interval){
                        clock_gettime(CLOCK_REALTIME, &timers[i]->time_before);
                        timers[i]->listener->on_time(timers[i]);
                    }
                }
            }
         } while (terminate == false);
    }

    https://habr.com/ru/post/569392/
    > Объектно-ориентированное программирование на Си без плюсов. Часть 2. Таймер

    Запостил: PolinaAksenova, 24 Июля 2021

    Комментарии (6) RSS

    Добавить комментарий