# 删除定时任务 # swoole\_timer\_clear不能用于清除其他进程的定时器,只作用于当前进程 上章节挖的坑,这节来填下。 ![](https://box.kancloud.cn/96224142c70af41e6a3d54902bd2ef57_712x69.png) 最初想着既然会返回定时器ID,那么我只要把ID存在数据库,然后需要删除的时候调用下swoole\_timer\_clear自然搞定,但是怎么都删不掉 ![](https://box.kancloud.cn/83550000e2377543638f41d5c8062299_596x262.png) 看到官方文档,发现返回的$timer\_id是没什么用的,回调函数中的id才是真主,终于可以删除了,但是问题又来了,这刚添加就被删了,还怎么定时怎么循环,继续开动脑细胞 ~~~ //初始化和客户端定时任务的公共部分 public function commonTaskDo($serv,$data){ if(is_array($data)){ if(!$data['onetime']) { //非一次性任务 $serv->tick($data['millisecond'], function($timer_code) use ($serv ,$data) { $taskdata= Db::table(Tool::getPrefix('system').'timer')->where('timer_id',$data['timer_id'])->find(); if($taskdata['status']==1){ $serv->task($data); echo "非一次性任务(timer_id:".$data['timer_id'].") work Continue Handle Worker\n"; }else{ $serv->clearTimer($timer_code); echo "非一次性任务delete work (timer_id:".$data['timer_id'].") success! \n"; } }); }else{ //一次性任务 $serv->after($data['millisecond'], function($timer_code) use ($serv ,$data) { $serv->task($data); }); } } } ~~~ 加一张定时任务数据表,每新加一个定时就在表中新加一条记录(且状态为运行中),删除定时只是修改状态(已删除),然后如上,在定时器回调函数中,每次回调都去判断这个状态,来确定是否需要删除定时,现在终于可以正常的新增删除定时了,但是编辑定时呢????? 解决这个问题的时候,开始是把我绕迷了,有种盗梦空间的感觉,怎么都走不出去了,终于我的脑子还是开窍了,只要新增不就可以了嘛(感觉自己好伟大),所以编辑就是删除原来的定时(修改记录状态)然后再重新新增一条定时记录在表中(且状态为运行中)