• Libuv Timer定时器


    Libuv Timers定时器

      在定时器启动后一段特定的时间后,定时器会调用回调函数。Libuv的定时器还可以设定为按照时间间隔定时启动,而不仅仅是启动一次。

      简单地使用一个定时器,超过时间timeout作为参数初始化定时器(意味第一次启动之后多久响应回调事件),还有一个可选参数repeat。定时器可以在任意时刻被终止。

    uv_timer_t timer_req;
    
    uv_timer_init(loop,&timer_req);
    uv_timer_start(&timer_req,callback,5000,2000);
    
    • 1
    • 2
    • 3
    • 4

      上述操作会启动一个循环定时器(repeating timer),它会调用uv_timer_start后,5秒(timeout)启动回调函数,然后每2秒(repeat)循环启动回调函数。可以使用:

    uv_timer_stop(&timer_req);
    
    • 1

      来终止一个定时器。这个函数也可以在回调函数中被安全地使用。

      循环的间隔也可以被随时定义,使用:

    uv_timer_set_repeat(uv_timer_t* timer,int64_t repeat);
    
    • 1

      它会在可能的情况下发挥作用。如果上述函数是在定时器回调函数中被调用,这意味着:

    • 如果定时器未设置循环,此时定时器已经停止。需要先用uv_timer_start重新启动。
    • 如果定时器被设置为循环,那么下一次超时的时间已经被规划好,所以在切换新的循环间隔之前,旧的循环间隔仍然还会发挥一次作用。

      工具函数:

    int uv_timer_again(uv_timer_t *)
    
    • 1

      只适用于循环定时器,相当于停止定时器,然后把原先的timeoutrepeat值都设置为之前的repeat值,并启动定时器。如果调用该函数的时候,定时器尚未启动,那么则调用失败(错误码UV_EINVAL)并返回-1。

    简单示例

    static uv_timer_t testTimer;
    
    void Test(uv_timer_t* handle)
    {
    	fprintf(stdout, "load Test1 %llu\n", uv_now(g_loop));
    	static int count = 0;
    	count++;
    	fprintf(stdout, "update shopActive %d\n", count);
    	if (count == 5)
    	{
    		fprintf(stdout, "save shopData %d\n", count);
    		count = 0;
    	}
    }
    
    int main(int argc, char* argv[])
    {
    	g_loop = uv_default_loop();
    	uv_timer_init(g_loop, &testTimer);
    	uv_timer_start(&testTimer, Test, 0, 5000);
    	uv_run(g_loop, UV_RUN_DEFAULT);
    
    	printf("main loop stop\n");
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
  • 相关阅读:
    体系结构27_多处理机(1)
    在高并发情况下我是这样解决单用户超领优惠券问题
    DRF-(4)
    Java内部类
    使用Leaflet对WMS做空间几何范围查询
    Postman知识汇总
    遥感指数数据库
    Java的jinfo命令使用详解
    Overleaf能使用自己系统中的字体嘛?
    PostgreSQL本地化
  • 原文地址:https://blog.csdn.net/qq135595696/article/details/126734108