libuv计时器
1、uv_timer_t - 计时器句柄
使用该类型句柄来调用计时器回调
2、API
2.1、uv_timer_init
int uv_timer_init(uv_loop_t* loop, uv_timer_t* handle)
初始化计时器句柄
2.2、uv_timer_start
int uv_timer_start(uv_timer_t* handle, uv_timer_cb cb, uint64_t timeout, uint64_t repeat)
void (*uv_timer_cb)(uv_timer_t* handle)
开始计时器,timeout 和 repeat 都是以 ms 作为单位
如果 timeout 为 0,则回调函数在下次时间迭代中执行,如果非0,则回调函数会在 timeout 后第一次执行,接下来每次在 repeat 后执行
2.3、uv_timer_stop
int uv_timer_stop(uv_timer_t* handle)
停止计时器,回调函数不会再执行
2.4、uv_timer_again
int uv_timer_again(uv_timer_t* handle)
停止计时器,如果计时器已经开始并正在正在重复执行,则使用 repeat 作为 timeout 重启,若计时器还没有开始,则返回 UV_EINVAL
2.5、uv_timer_set_repeat
void uv_timer_set_repeat(uv_timer_t* handle, uint64_t repeat)
设置计时器的 repeat 值,计时器会根据该值进行调度
如果 repeat 为50ms,首次运行了17ms,则33ms后会再次运行。而如果有其他任务占用,超出了33ms,则之后回调函数会尽快去执行
2.6、uv_timer_get_repeat
uint64_t uv_timer_get_repeat(const uv_timer_t* handle)
返回 repeat 值
2.7、uv_timer_get_due_in
uint64_t uv_timer_get_due_in(const uv_timer_t* handle)
获取计时器的到期值,这个值是相对于 uv_now() 的
如果计时器失效,则返回0
3、代码示例
void timerCB(uv_timer_t *handle) {
auto value = (long long) handle->data;
cout << value << endl;
if (value >= 126) {
uv_timer_stop(handle);
return;
}
handle->data = (void *) ++value;
}
int main() {
uv_loop_t *loop = uv_default_loop();
uv_timer_t timer;
uv_timer_init(loop, &timer);
timer.data = (void *) 123;
uv_timer_start(&timer, timerCB, 1000, 4000);
uv_run(loop, UV_RUN_DEFAULT);
return 0;
}
libuv计时器的更多相关文章
- libuv源码分析前言
Libevent,libev,libuv三者的区别所在? libevent提供了全套解决方案(事件库,非阻塞IO库,http库,DNS客户端),然而libevent使用全局变量,导致非线程安全.它的w ...
- 简单对比 Libevent、libev、libuv
Libevent.libev.libuv三个网络库,都是c语言实现的异步事件库Asynchronousevent library). 异步事件库本质上是提供异步事件通知(Asynchronous Ev ...
- 网络库libevent、libev、libuv对比
Libevent.libev.libuv三个网络库,都是c语言实现的异步事件库Asynchronousevent library). 异步事件库本质上是提供异步事件通知(Asynchronous Ev ...
- libuv 网络库设计概览译
设计概览 libuv 是一种支持跨平台的网络库,最初是为了NodeJS作为某个模块实现的,主要基于事件驱动的I/O 模型设计的. 这个库不仅仅对不同的I/O polling 机制提供简单的抽象. ha ...
- TinyWeb v1.0 正式完成第一个Release版本(功能基于 libuv 跨平台库)
使用方法很简单,很容易融入现有项目,使现有项目拥有Web网站功能和WebSocket,以及Socket直连! 并且包含了一个跨平台(windows/linux)工具集合; 嗯,也挺棒的^,^ 在项目中 ...
- android 两种实现计时器时分秒的实现,把时间放在你的手中~
可能我们在开发中会时常用到计时器这玩意儿,比如在录像的时候,我们可能需要在右上角显示一个计时器.这个东西其实实现起来非常简单. 只需要用一个控件Chronometer,是的,就这么简单,我都不好意思讲 ...
- TCP四种计时器
TCP共使用以下四种计时器,即重传计时器.坚持计时器.保活计时器和时间等待计时器 .这几个计时器的主要特点如下: 1.重传计时器 当TCP发送报文段时,就创建该特定报文段的重传计时 ...
- C# - 计时器Timer
System.Timers.Timer 服务器计时器,允许指定在应用程序中引发事件的重复时间间隔. using System.Timers: // 在应用程序中生成定期事件 public class ...
- JavaScript学习笔记5 之 计时器 & scroll、offset、client系列属性 & 图片无缝滚动
一.计时器 setInterval ( 函数/名称 , 毫秒数 )表示每经过一定的毫秒后,执行一次相应的函数(重复) setTimeout ( 函数/名称 , 毫秒数 ) 表示经过一定的毫秒后,只执行 ...
- Nodejs事件引擎libuv源码剖析之:请求(request)结构的设计剖析
声明:本文为原创博文,转载请注明出处. 在libuv中,请求(request)代表一个用户向libuv发出的指令,比如uv_connect_s就表示一个tcp的连接请求.uv_work ...
随机推荐
- Codeforces Round #733 (Div. 1 + Div. 2)
比赛链接:Here 1530A. Binary Decimal 现在规定一种只由0和1组成的数字,我们称这种数字为二进制数字,例如10,1010111,给定一个数n,求该数字最少由多少个二进制数字组成 ...
- Codeforces Round #707 (Div. 2, based on Moscow Open Olympiad in Informatics Editorial
Codeforces Round #707 (Div. 2, based on Moscow Open Olympiad in Informatics) Problem 1501A. Alexey a ...
- 深度学习基础课:“判断性别”Demo需求分析和初步设计(下2)
大家好~我开设了"深度学习基础班"的线上课程,带领同学从0开始学习全连接和卷积神经网络,进行数学推导,并且实现可以运行的Demo程序 线上课程资料: 本节课录像回放1 本节课录像回 ...
- C#约瑟夫环问题算法
/// <summary> /// 约瑟夫环问题算法 /// </summary> /// <param name="total">总人数< ...
- MyBatis 系列:MyBatis 源码环境搭建
目录 一.环境准备 二.下载 MyBatis 源码和 MyBatis-Parent 源码 三.创建空项目.导入项目 四.编译 mybatis-parent 五.编译 mybatis 六.测试 总结 一 ...
- 缓存选型:Redis or MemCache
★ Redis24篇集合 1 背景 互联网产品为了保证高性能和高可用性,经常会使用缓存来进行架构设计.最常用的就是使用Redis了,也有部分企业会选择使用Memcache. 所以了解 Redis 和 ...
- [转帖]TLS 1.2 浏览器兼容性
https://support-splashtopbusiness.splashtop.com/hc/zh-cn/articles/4414002633883-TLS-1-2-%E6%B5%8F%E8 ...
- nexus的简单安装与使用
nexus的简单安装与使用 文件下载 官网上面下载文件比较麻烦, 得科学一些 https://www.sonatype.com/download-oss-sonatype 选择oss 开源版进行下载 ...
- [转帖]88. sys_kwr
88. sys_kwr ¶ 88.1. 插件sys_kwr简介 ¶ 插件sys_kwr是KingbaseES 的一个扩展插件.主要功能是通过周期性自动记录性能统计相关的快照,分析出KingbaseES ...
- FIO的再学习-不同Raid,不同磁盘性能验证
FIO的再学习-不同Raid性能验证 背景 发现自己对iodepth的和num_jobs的理解存在偏差 找了一些资料才发现自己很多地方做的不对. 这里找到一个新资料可以进行模拟数据库的测试 测试配置文 ...