Timer FreeBSD内核模块中的计时器?

Timer FreeBSD内核模块中的计时器?,timer,kernel,freebsd,kernel-module,callout,Timer,Kernel,Freebsd,Kernel Module,Callout,我想让我的内核模块在FreeBSD内核中周期性地做一些事情(特定的时间间隔,比如10秒)。有这样做的例子吗 我搜索并发现有callout/timeout(old)这样的函数,但它们看起来很复杂,我找不到很好的例子。对于callout'',似乎callout\u reset''与我想要的函数类似(参数包括处理程序和时间间隔)。但它似乎只执行一次。所以我很困惑 即使对于函数“timeout”,示例也是最好的。您需要使用callout(9)。例如。。。嗯,对于真实世界的代码,你可以看看这个:;搜索is

我想让我的内核模块在FreeBSD内核中周期性地做一些事情(特定的时间间隔,比如10秒)。有这样做的例子吗

我搜索并发现有callout/timeout(old)这样的函数,但它们看起来很复杂,我找不到很好的例子。对于
callout'',似乎
callout\u reset''与我想要的函数类似(参数包括处理程序和时间间隔)。但它似乎只执行一次。所以我很困惑

即使对于函数“timeout”,示例也是最好的。

您需要使用callout(9)。例如。。。嗯,对于真实世界的代码,你可以看看这个:;搜索is_标注。基本上,您需要“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);
}
您需要使用标注(9)。例如。。。嗯,对于真实世界的代码,你可以看看这个:;搜索is_标注。基本上,您需要“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);
}
您需要使用标注(9)。例如。。。嗯,对于真实世界的代码,你可以看看这个:;搜索is_标注。基本上,您需要“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);
}
您需要使用标注(9)。例如。。。嗯,对于真实世界的代码,你可以看看这个:;搜索is_标注。基本上,您需要“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);
}

这里的
seconds*hz
是什么意思?我看到了几个例子,但在源代码中似乎没有定义
hz
。当我使用像
10000
这样的值时,我相信这可能不到一秒钟,因为它是滴答声。但我的处理器似乎在很长一段时间后被触发。我的意思是,如何将这个滴答声转换为秒。“秒”是秒,秒*赫兹是滴答声。不要定义hz,使用中的外部定义。这里的
seconds*hz
是什么意思?我看到了几个例子,但在源代码中似乎没有定义
hz
。当我使用像
10000
这样的值时,我相信这可能不到一秒钟,因为它是滴答声。但我的处理器似乎在很长一段时间后被触发。我的意思是,如何将这个滴答声转换为秒。“秒”是秒,秒*赫兹是滴答声。不要定义hz,使用中的外部定义。这里的
seconds*hz
是什么意思?我看到了几个例子,但在源代码中似乎没有定义
hz
。当我使用像
10000
这样的值时,我相信这可能不到一秒钟,因为它是滴答声。但我的处理器似乎在很长一段时间后被触发。我的意思是,如何将这个滴答声转换为秒。“秒”是秒,秒*赫兹是滴答声。不要定义hz,使用中的外部定义。这里的
seconds*hz
是什么意思?我看到了几个例子,但在源代码中似乎没有定义
hz
。当我使用像
10000
这样的值时,我相信这可能不到一秒钟,因为它是滴答声。但我的处理器似乎在很长一段时间后被触发。我的意思是,如何将这个滴答声转换为秒。“秒”是秒,秒*赫兹是滴答声。不要定义hz,请使用中的外部定义。