gpt4 book ai didi

c - 周期性 linux 定时器的定时器到期值表示什么?

转载 作者:太空宇宙 更新时间:2023-11-04 08:04:21 27 4
gpt4 key购买 nike

我已经完成了创建和启动计时器的手册页。

http://man7.org/linux/man-pages/man2/timerfd_create.2.html

但是,除了 arm(start) 和 disarm(stop) 之外,我不确定 struct itimerspec 的字段“it_value”的用途。

问题:当为这个字段指定一个非零值时会发生什么。手册页记录非零值将启动计时器并记录为计时器有效期?定时器到期是什么意思?定时器超时有什么影响?

要启动(设置)定时器,可以给出从 1 ns 到等于定时器间隔(非零)的值。这两种情况下的区别和预期行为是什么

方法一:使定时器过期时间等于interval

int timerfd = timerfd_create(CLOCK_MONOTONIC,0);
int milliseconds = 50;// 50 ms for example
struct itimerspec timspec;
timspec.it_interval.tv_sec = 0;
timspec.it_interval.tv_nsec = milliseconds * 1000000;
timspec.it_value.tv_sec = timspec.it_interval.tv_sec;
timspec.it_value.tv_nsec = timspec.it_interval.tv_nsec;
int res = timerfd_settime(timerfd, 0, &timspec, 0);

方法二:定时器过期小于定时器间隔

int timerfd = timerfd_create(CLOCK_MONOTONIC,0);
int milliseconds = 50;// 50 ms for example
struct itimerspec timspec;
timspec.it_interval.tv_sec = 0;
timspec.it_interval.tv_nsec = milliseconds * 1000000;
timspec.it_value.tv_sec = 0;
timspec.it_value.tv_nsec = 1;
int res = timerfd_settime(timerfd, 0, &timspec, 0);

最佳答案

However, i am not sure the use of the field "it_value" of struct itimerspec other than arm(start) and disarm(stop).

显然,您的兴趣在于将此字段与 timerfd_settime() 的第二个参数一起使用,而不是解释第三个参数指向的结构中设置的值(如果有的话) , 或由 timerfd_gettime() 填写。不过,它们几乎都是一样的。

您似乎在键入启用和禁用计时器时专注于错误的事情。正如您链接的联机帮助页所说,

The new_value argument specifies the initial expiration and interval for the timer.

(强调)。也就是说,struct itimerspecit_value 传达下一次计时器到期前的时间量(或该到期的绝对时间,取决于标志),除了两个字段都为零表示计时器永远不会过期——它被解除——而不是它会立即过期。此成员传递的值与 it_interval 成员传递的值没有任何特定的相关性。

由此可见,timerfd_settime() 可用于武装一个解除武装的计时器或解除武装的计时器,具体取决于传递给它的 it_value,但这些是特殊结果更一般的行为。一般情况下,它用于更改定时器下一次到期前的时间量,以及后续到期之间的时间增量。

To start(arm) a timer, one can give value ranging from 1 ns to value equal to timer interval(non-zero).

... 或更多。下一次到期前的延迟不限于间隔的长度。作为一种极端情况,间隔可以为零,这样定时器在超时一次后就被解除。

what would be the difference and the expected behavior in these two cases

Method1: Make the timer expiration equal to [nonzero] interval

计时器将在指定的时间量(等于间隔)后首先到期。每次过期都会重置为interval给定的时间。

Method 2: [nonzero] Timer expiration less then [nonzero] timer interval

计时器将在指定的时间量(小于间隔)后首先到期。每次过期都会重置为interval给定的时间。

关于c - 周期性 linux 定时器的定时器到期值表示什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43925582/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com