libuv定时器的使用

定时器有这么以下几个函数:

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;
}

转载于:https://my.oschina.net/purplespace/blog/1490806

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值