定时器: timer
libmill是一个基于c语言开发的go风格协程库,实现了go风格的协程操作、chan操作、非阻塞的网络io操作等等,是一个不错的linux平台下c风格协程库实现。如果你想从0到1的快速了解如何开发一个协程库,libmill将是一个非常不错的案例;如果你想更深入地了解go,libmill里面也借鉴了go的一些设计思想;或者你想在生产环境中使用,开发者也提供了一个更健壮的版本libdill。
1 timer.h
struct mill_timer {
// mill_list_item结合mill_cont来实现了list iterator
/* Item in the global list of all timers. */
struct mill_list_item item;
/* The deadline when the timer expires. -1 if the timer is not active. */
int64_t expiry;
/* Callback invoked when timer expires. Pfui Teufel! */
mill_timer_callback callback;
};/* Test wheather the timer is active. */
#define mill_timer_enabled(tm) ((tm)->expiry >= 0)
/* Add a timer for the running coroutine. */
void mill_timer_add(struct mill_timer *timer, int64_t deadline, mill_timer_callback callback);
/* Remove the timer associated with the running coroutine. */
void mill_timer_rm(struct mill_timer *timer);
/* Number of milliseconds till the next timer expires. If there are no timers returns -1. */
int mill_timer_next(void);
/* Resumes all coroutines whose timers have already expired. Returns zero if no coroutine was resumed, 1 otherwise. */
int mill_timer_fire(void);
/* Called after fork in the child process to deactivate all the timers inherited from the parent. */
void mill_timer_postfork(void);2 timer.c
Last updated
Was this helpful?