====== 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);