Няшная / Говнокод #27535 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 PolinaAksenova, (Updated )

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

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

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8