您在这里: Wiki » notes » s » Solaris 的 Cyclic

Solaris 的 Cyclic

Solaris 的 Cyclic

Solaris 的 Cyclic 是和 FreeBSD 的 timeout(9) 不同的 API。

cyclic 是在 'cyt_when' 之后 以 'cyt_interval' 为间隔触发。因此,原先采用 Cyclic 的程序应如此修改:

第一部分:

        cyclic_reprogram(cycid, gethrtime() + timeout);

在 FreeBSD 上对应的应为:

        callout_reset(&cycid,
            hz * timeout / NANOSEC, callback, arg);

其中 callback 是 cyclic 的回调函数。

第二部分:

        cyclic_reprogram(cycid, CY_INFINITY);

相当于停用这个cyclic。在 FreeBSD 上对应的应为:

        callout_drain(&cycid);

第三部分:

在回调处理函数中, Solaris 不需要做额外处理(后续仍会按 interval 来调用该回调处理),而 FreeBSD 则需要在结束前做:

        callout_schedule(&cycid, hz * interval / NANOSEC);
notes/s/solaris_cyclic.txt · 最后更改: 2022/12/30 05:48