一段定时器代码,谁能看懂

RalphyZ 2018-10-15 04:37:10
这是一段时间轮定时器代码,如下
void tick()
{
tw_timer* tmp = slots[cur_slot];//取得时间轮上当前槽的头结点
printf("current slot is %d\n", cur_slot);
while (tmp)
{
printf("tick the timer once\n");
/*如果定时器的rotation值大于0,则他的这一轮不起作用*/
if (tmp->rotation > 0)
{
tmp->rotation--;
tmp = tmp->next;
}
/*否则,说明定时器已经到期,于是执行定时任务,然后删除该定时器*/
else
{
tmp->cb_func(tmp->user_data);
if (tmp == slots[cur_slot])
{
printf("delete header in cur_slot\n");
slots[cur_slot] = tmp->next;
delete tmp;
if (slots[cur_slot])
{
slots[cur_slot]->prev = NULL;
}
tmp = slots[cur_slot];
}
else
{
tmp->prev->next = tmp->next;
if (tmp->next)
{
tmp->next->prev = tmp->prev;
}
tw_timer* tmp2 = tmp->next;
delete tmp;
tmp = tmp2;
}
}
}
cur_slot = ++cur_slot % N;/*更新时间轮的当前槽,以反映时间轮的转动*/
}



谁能看懂最后一个else里面是啥意思
else
{
tmp->prev->next = tmp->next;
if (tmp->next)
{
tmp->next->prev = tmp->prev;
}
tw_timer* tmp2 = tmp->next;
delete tmp;
tmp = tmp2;
}

这个链表的上一个的下一个不就是自己么,为啥要这么写,这是一本书的源码
...全文
139 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
RalphyZ 2018-10-15
  • 打赏
  • 举报
回复
结贴了,刚才没看明白,调坑里了...
RalphyZ 2018-10-15
  • 打赏
  • 举报
回复
引用 1 楼 DelphiGuy 的回复:
就是把tmp这一节点删掉了 A<->tmp<->B 变成A<->B
不是吧,能每一句解释一下么? 我现在的疑问是

else
{
//假如链表现在是1、2、3、4,tmp现在指向的2,
	tmp->prev->next = tmp->next;//tmp的上一个的下一个不就是tmp本身么?也就是tmp现在指向了3
	if (tmp->next)//这一句是判断tmp的下一个也就是4是否为真
	{
		tmp->next->prev = tmp->prev;//如果为真把tmp又指向了上一个也就是2,
	}
//尤其是上面这一段我很是费解,到底啥意思

//下面这一段tmp指向下一个,然后删了原本的tmp,但是下一个的并没设为头啊,也没设置上一个节点是啥,就把tmp删除立了
	tw_timer* tmp2 = tmp->next;
	delete tmp;
	tmp = tmp2;
}
  • 打赏
  • 举报
回复
就是把tmp这一节点删掉了
A<->tmp<->B
变成A<->B

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧