FreeBSD 内核模块中的计时器?
Timer in FreeBSD kernel module?
我想让我的内核模块在 FreeBSD 内核中周期性地做一些事情(一定的时间间隔,比如 10 秒)。有没有这样做的例子?
我搜索了一下,发现有callout/timeout(old)这样的函数,但是看起来很复杂,找不到很好的例子。对于 callout'', it seems that
callout_reset'' 类似于我想要的函数(参数包括处理程序和时间间隔)。但它似乎只执行一次。所以我很困惑。
示例是最好的,即使对于函数“超时”也是如此。
您需要使用 callout(9)。至于例子......嗯,对于真实世界的代码,你可以看看这个:http://svnweb.freebsd.org/base/head/sys/dev/iscsi/iscsi.c?revision=275925&view=markup;搜索 is_callout。基本上,您需要 'struct timeout',一个会定期调用的函数,然后您需要让计时器计时:
struct callout callout;
static void
callout_handler(void *whatever)
{
// do your stuff, and make sure to get called again after 'seconds'.
callout_schedule(&callout, seconds * hz);
}
static void
start_ticking(void)
{
callout_init(&callout, 1);
callout_reset(&callout, seconds * hz, callout_handler, whatever);
}
我想让我的内核模块在 FreeBSD 内核中周期性地做一些事情(一定的时间间隔,比如 10 秒)。有没有这样做的例子?
我搜索了一下,发现有callout/timeout(old)这样的函数,但是看起来很复杂,找不到很好的例子。对于 callout'', it seems that
callout_reset'' 类似于我想要的函数(参数包括处理程序和时间间隔)。但它似乎只执行一次。所以我很困惑。
示例是最好的,即使对于函数“超时”也是如此。
您需要使用 callout(9)。至于例子......嗯,对于真实世界的代码,你可以看看这个:http://svnweb.freebsd.org/base/head/sys/dev/iscsi/iscsi.c?revision=275925&view=markup;搜索 is_callout。基本上,您需要 'struct timeout',一个会定期调用的函数,然后您需要让计时器计时:
struct callout callout;
static void
callout_handler(void *whatever)
{
// do your stuff, and make sure to get called again after 'seconds'.
callout_schedule(&callout, seconds * hz);
}
static void
start_ticking(void)
{
callout_init(&callout, 1);
callout_reset(&callout, seconds * hz, callout_handler, whatever);
}