例子:
static void
ngx_http_hello_print(ngx_event_t *ev)
{
printf("hello world\n");
ngx_add_timer(ev, 1000);
}
static ngx_int_t
ngx_http_hello_process_init(ngx_cycle_t *cycle)
{
dummy.fd = (ngx_socket_t) -1;
ngx_memzero(&ev, sizeof(ngx_event_t));
ev.handler = ngx_http_hello_print;
ev.log = cycle->log;
ev.data = &dummy;
ngx_add_timer(&ev, 1000);
return NGX_OK;
static ngx_connection_t dummy;
static ngx_event_t ev;static void
ngx_http_hello_print(ngx_event_t *ev)
{
printf("hello world\n");
ngx_add_timer(ev, 1000);
}
static ngx_int_t
ngx_http_hello_process_init(ngx_cycle_t *cycle)
{
dummy.fd = (ngx_socket_t) -1;
ngx_memzero(&ev, sizeof(ngx_event_t));
ev.handler = ngx_http_hello_print;
ev.log = cycle->log;
ev.data = &dummy;
ngx_add_timer(&ev, 1000);
return NGX_OK;
}
这段代码将注册一个定时事件——每过一秒钟打印一次hello world。ngx_add_timer函数就是用来完成将一个新的定时事件加入定时器红黑树中,定时事件被执行后,就会从树中移除,因此要想不断的循环打印hello world,就需要在事件回调函数被调用后再将事件给添加到定时器红黑树中。 ngx_http_hello_process_init是注册在模块的进程初始化阶段的回调函数上。
由于,ngx_even_core_module模块排在自定义模块的前面,所以我们在进程初始化阶段添加定时事件时,定时器已经被初始化好了。