Пишу софт на C.
Нужно выполнять ряд действий за равные промежутки времени (высокая точно НЕ нужна). Как правильно узнать что текущий промежуток уже закончился?
Варианты:
1.
action();
clock_gettime(CLOCK_MONOTONIC, &point)
if (compare(point, end)) break;
Тут для меня не очень понятно насколько вообще будет разумно использовать так ресурсы: clock_gettime() не бесплатен
2. вводить тред в котором внутри будет:
thread2() {
sleep(100);
global_var = true;
}
затем после каждого action(); делать
if (global_var) break;
3. ДЭБИЛЬНЫЙ, но работающий вариант с сигналами
void handler(int signo) {
signal(SIGALRM, handler);
}
...
{
struct itimerval tval = {.it_value.tv_sec = 1};
setitimer(ITIMER_REAL, &tval, NULL);
}
Мне крайне странно, что после каждого срабатывания хендлера, он сбрасывается, и надо каждый раз делать signal(SIGALRM, handler); Что за бред?
Какие еще есть варианты?