skynet定时器源码分析
来源:互联网 发布:adobe for mac 编辑:程序博客网 时间:2024/05/01 20:06
#include "skynet.h"
#include "skynet_timer.h"
#include "skynet_mq.h"
#include "skynet_server.h"
#include "skynet_handle.h"
#include
#include
#include
#include
#if defined(__APPLE__)
#include
#endif
// skynet 定时器的实现为linux内核的标准做法
typedef void (*timer_execute_func)(void *ud,void *arg);
// 对于内核最关心的、interval值在[0,255]
// 内核在处理是否有到期定时器时,它就只从定时器向量数组tv1.vec[256]中的某个定时器向量内进行扫描。
// (2)而对于内核不关心的、interval值在[0xff,0xffffffff]之间的定时器,
// 它们的到期紧迫程度也随其interval值的不同而不同。显然interval值越小,定时器紧迫程度也越高。
// 因此在将它们以松散定时器向量进行组织时也应该区别对待。通常,定时器的interval值越小,
// 它所处的定时器向量的松散度也就越低(也即向量中的各定时器的expires值相差越小);而interval值越大,
// 它所处的定时器向量的松散度也就越大(也即向量中的各定时器的expires值相差越大)。
// 内核规定,对于那些满足条件:0x100≤interval≤0x3fff的定时器,
// 只要表达式(interval>>8)具有相同值的定时器都将被组织在同一个松散定时器向量中,
// 即以1》8=256为一个基本单位。因此,为组织所有满足条件0x100≤interval≤0x3fff的定时器,
// 就需要2^6=64个松散定时器向量。同样地,为方便起见,这64个松散定时器向量也放在一起形成数组,并作为数据结构timer_vec的一部分。
#define TIME_NEAR_SHIFT 8
#define TIME_NEAR (1 << TIME_NEAR_SHIFT)
#define TIME_LEVEL_SHIFT 6
#define TIME_LEVEL (1 << TIME_LEVEL_SHIFT)
#define TIME_NEAR_MASK (TIME_NEAR-1)
#define TIME_LEVEL_MASK (TIME_LEVEL-1)
struct timer_event {
};
struct timer_node {
};
struct link_list {
};
struct timer {
};
static struct timer * TI = NULL;
// 清除链表,返回原链表第一个节点指针
static inline struct timer_node *
link_clear(struct link_list *list)
{
}
// 将node添加到链表尾部
static inline void
link(struct link_list *list,struct timer_node *node)
{
}
static void
add_node(struct timer *T,struct timer_node *node)
{
}
static void
timer_add(struct timer *T,void *arg,size_t sz,int time)
{
}
static void
timer_shift(struct timer *T) {
}
// 从超时列表中取到时的消息来分发
static inline void
timer_execute(struct timer *T) {
}
// 时间每过一个滴答,执行一次该函数
static void
timer_update(struct timer *T)
{
}
static struct timer *
timer_create_timer()
{
}
// 插入定时器,time的单位是0.01秒,如time=300,表示3秒
int
skynet_timeout(uint32_t handle, int time, int session) {
}
// 返回系统开机到现在的时间,单位是百分之一秒 0.01s
static uint32_t
_gettime(void) {
#if !defined(__APPLE__)
#else
#endif
}
void
skynet_updatetime(void) {
}
uint32_t
skynet_gettime_fixsec(void) {
}
uint32_t
skynet_gettime(void) {
}
void
skynet_timer_init(void) {
#if !defined(__APPLE__)
#else
#endif
}
- skynet定时器源码分析
- skynet源码分析【skynet定时器服务的实现】
- skynet 源码分析
- skynet源码分析【skynet名字的管理】
- skynet底层源码阅读(6)-定时器
- skynet框架 源码分析 一
- skynet框架 源码分析 二
- skynet框架 源码分析 三
- skynet框架 源码分析 四
- skynet框架 源码分析 五
- skynet消息队列源码分析
- skynet框架 源码分析 一
- skynet框架 源码分析 二
- skynet框架 源码分析 三
- skynet框架 源码分析 四
- skynet框架 源码分析 五
- skynet源码分析【skynet服务回调函数的实现】
- skynet源码分析(7)--skynet中的timer
- skynet源码剖析06 service-src下的C服务实现文件说明
- 二分查找分C++实现
- hdu 2199 Can you solve this equation?
- sql sever 2008表连接方式总结
- HDOJ-2199-Can you solve this equation?(二分查找)
- skynet定时器源码分析
- 网络爬虫
- Android数据存储之操作SQLite
- ✅确定下来的一种说法
- Java 设计模式之单例模式
- struts.xml action-mapping 元素讲解
- skynet消息队列源码分析
- Median of Two Sorted Arrays
- main函数相关性质