tbox提供了两种定时器:
一种是基于最小堆的高精度定时器,精确到ms级别,但是时间复杂度在O(logn)
还有一种就是基于timing-wheel时间轮算法的低精度定时器,时间复杂度仅为O(1),实常数级别的,相当的快。
这个定时器是参考了linux内核的timer算法实现,不过linux那个比较通用,实现复杂,tbox中为了考虑精简性和低资源,对其算法做了精简
使得其资源占用更小,效率更高,但是使用场景上会有些限制,可以根据自己的实际情况,来判断使用需要用这个定时器来优化性能,还是使用高精度版本。
ltimer低精度定时器,提供了几种精度模式:
TB_LTIMER_TICK_100MS:100毫秒级别
TB_LTIM
继续阅读 »
tbox内部提供了两种定时器实现:timer和ltimer
timer: 高精度版本,采用最小堆实现,复杂度是:O(log(n))
ltimer: 低精度版本,采用linux内核中的timing-wheel算法,复杂度是:O(1)
这里主要讲解下,如何使用timer实现高精度的定时器任务,精确到ms级别,对于低精度的ltimer,可以参考:低精度定时器的使用
下面先给个简单的例子来说明:
```c
/* 定义一个定时器任务处理函数
*
* @param killed 表示当前任务是否被tb_timer_task_kill强行kill掉的
* @param priv 投递任务时传入的用户自定义数据指针
*/
stat
继续阅读 »
为什么 UIScrollView 的滚动会导致 NSTimer 失效?
定时器里面有个runoop mode,一般定时器是运行在Defaultmode上但是如果滑动了这个页面,主线程runloop会转到UITrackingRunLoopMode中,这时候就不能处理定时器了,造成定时器失效,原因就是runroop mode选错了。
解决办法有2个:
1:更改mode为NSRunLoopCommonModes(无论runloop运行在哪个mode,都能运行)
2:切换到主线程来更新UI界面的刷新
继续阅读 »
用策略模式实现缓动动画
需求:让小球以各种缓动效果在页面中运动
动画开始前需要记录的:
小球所在原始位置
小球移动的目标位置
动画开始时的时间点
小球运动的时间点
之后,用setInterval创建一个定时器,定时器每19秒循环一次。
//缓动算法,此算法移植于flash
var tween = {
//t:动画已消耗的时间,b:小球原始位置,c:小球目标位置,d:动画持续时间
linear: function(t, b, c, d) {
return c*t/d + b;
},
reseIn: function(t, b, c, d) {
ret
继续阅读 »
新特性
增加smallest参数配置选项,实现一键配置最小化编译,禁用所有扩展模块和依赖库
增加进程创建和控制接口
改进
增强环境变量设置接口
修改xmake.lua支持最新版xmake v2.x, 简化编译配置
Bugs修复
修复ltimer定时器不准问题
修复asio部分内存泄露问题
修复asio/httpd在linux下keepalive模式,响应很慢问题
修复windows下路径处理的一些bug
继续阅读 »