您的位置:首页 > 其它

libuv定时器的使用

2017-07-27 00:00 519 查看
定时器有这么以下几个函数:

int uv_timer_init(uv_loop_t *, uv_timer_t *handle);
int uv_timer_start(uv_timer_t *handle, uv_timer_cb cb, uint64_t timeout, uint64_t repeat);
int uv_timer_stop(uv_timer_t *handle);
int uv_timer_again(uv_timer_t *handle);
void uv_timer_set_repeat(uv_timer_t *handle, uint64_t repeat);
uint64_t uv_timer_get_repeat(const uv_timer_t *handle);

uv_timer_init

uv_timer_init
主要是将uv_timer_t绑定到uv_loop_t.

第一个uv_loop_t参数即用uv_loop_new()创建.

特别注意的是handle不能是空指针,即不能定义一个指针而不申请内存传入.

uv_timer_start

handle 定时器句柄,由uv_timer_init初始化;

cb: 即回调函数, 函数声明是这样的:
typedef void (*uv_timer_cb)(uv_timer_t *handle);


其中的handle即为到定时时间的定时器句柄.

timeout: 第一次调用timer的超时时间;

repeat: 重复调用cb回调的周期;

uv_timer_stop

停止定时器

uv_timer_again

一般配合uv_timer_stop使用.

uv_timer_set_repeat/uv_timer_get_repeat

设置/获取重载时间.

测试用例

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

static int i = 0;
void timer_cb(uv_timer_t *handle) {
printf("timer_cb: %lu\n", time(nullptr));
if(++i >= 5) uv_timer_stop(handle); // 这里调用,便会停止定时器,uvLoop无克执行任务后,会导致main自动退出.
}

int main(int argc, char *argv[]) {
uv_loop_t *uvLoop = uv_loop_new();
uv_timer_t uvTimer;

printf("Main start!\n");

uv_timer_init(uvLoop, &uvTimer);
uv_timer_start(&uvTimer, timer_cb, 0, 1000);

uv_run(uvLoop, UV_RUN_DEFAULT);

printf("Main end!\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  libuv uv_timer