这是本文档旧的修订版!
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);