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 ...
随机推荐
- JS 实现 HashMap
HashMap代码(这种实现方式是错误的,错误原因:代码中_map._length变量是HashMap的所有实例共用的): /** * HashMap * 2021年09月09日 */ (functi ...
- AtCoder Regular Contest 120 AB题
比赛链接:Here A - Max Add 观察一下发现每次输出与两点有关,前缀和和当前位置最大值 int main() { cin.tie(nullptr)->sync_with_stdio( ...
- vivo 全球商城:订单中心架构设计与实践
一.背景 随着用户量级的快速增长,vivo 官方商城 v1.0 的单体架构逐渐暴露出弊端:模块愈发臃肿.开发效率低下.性能出现瓶颈.系统维护困难. 从2017年开始启动的 v2.0 架构升级,基于业务 ...
- 重磅发布丨从云原生到 Serverless,先行一步看见更大的技术想象力
(2022 云原生实战峰会) 2022年12月28日,以"原生万物 云上创新"为主题的第三届云原生实战峰会在线上举行. 会上,阿里云提出激活企业应用构建三大范式,并发布云原生可观测 ...
- vue学习笔记 六、ref定义单个数据
系列导航 vue学习笔记 一.环境搭建 vue学习笔记 二.环境搭建+项目创建 vue学习笔记 三.文件和目录结构 vue学习笔记 四.定义组件(组件基本结构) vue学习笔记 五.创建子组件实例 v ...
- vue-draggable 学习和使用
vue-draggable 学习和使用 https://www.jianshu.com/p/e8ff1e1cafb1
- Angular系列教程之自定义指令
.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...
- Git Clone一个GitHub仓库时,发生报错
1.问题 1.使用HTTP方式:Git: fatal: unable to access ' https://github. com/Light-City/CPlusPlusThings. git/' ...
- java - 创建文件
package practice; import java.io.File; import java.io.IOException; public class CreateFile { public ...
- ASR6505是基于STM 8位MCU的无线通信芯片组
ASR6505是基于STM 8位MCU的无线通信芯片组 ASR6505是一种通用的LoRa无线通信芯片组,集成了LoRa无线电收发器.LoRa调制解调器和一个8位CISC MCU ASR6505是基于 ...