В чем разница между возможными инициализацией hrtimer? - PullRequest
0 голосов
/ 30 октября 2019

Согласно hrtimer.h, HRTIMER_MODE_ABS означает, что значение времени является абсолютным, тогда как HRTIMER_MODE_REL означает, что значение времени относится к текущему моменту.

При использовании в контексте hrtimer_init, CLOCK_MONOTONIC или CLOCK_REALTIME также могут быть выбраны. Это означает, что hrtimers можно инициализировать несколькими способами, как показано ниже.

hrtimer_init(&timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
hrtimer_init(&timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);

hrtimer_init(&timer, CLOCK_REALTIME, HRTIMER_MODE_ABS);
hrtimer_init(&timer, CLOCK_REALTIME, HRTIMER_MODE_REL);

При проверке hrtimer.c 4-я инициализация не имеет никакого эффекта, поскольку clock_id устанавливается обратно в CLOCK_MONOTONIC, если mode не HRTIMER_MODE_ABS послеинициализация.

if (clock_id == CLOCK_REALTIME && mode != HRTIMER_MODE_ABS)
        clock_id = CLOCK_MONOTONIC;

Так что у нас остается 3 возможных поведения. Теперь я понимаю, что на CLOCK_REALTIME влияет системное время, поэтому оно может быть прерывистым, в то время как CLOCK_MONOTONIC противоположен (т. Е. Всегда движется вперед).

Ниже я понимаю возможные варианты поведения, но они кажутся слишкомпохоже, и я не уверен, что выбрать.

1) hrtimer_init(&timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);

Часы работают непрерывно, и время всегда истекает после абсолютного времени N. Изменения в системном времени не влияют на часыследовательно, оно не влияет на время истечения.

2) hrtimer_init(&timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);

Часы работают непрерывно, и время истекает через N раз. Изменения в системном времени не влияют на часы, поэтому они не влияют на время истечения с «сейчас».

3) hrtimer_init(&timer, CLOCK_REALTIME, HRTIMER_MODE_ABS);

Часы могут быть установлены, но любые изменения в системных часах по-прежнемуне влияет на срок действия, потому что таймер настроен на истечение в абсолютное время N.

Я понял, что моя интерпретация может быть неправильной, потому что все поведения выглядят одинаково. Кто-нибудь может пролить свет на это?

...