定时器怎么清除tick

来源:5-2 Swoole毫秒定时器

已经快秃顶了呢

2019-03-31

老师,您好我想在客户端链接后做个1000毫秒tick定时器,5000毫秒后结束tick定时器。

 public function onOpen($ws, $request)
    {
        var_dump($request->fd);
        $ws->push($request->fd,'欢迎链接,' . $request->fd);
        Swoole_timer_tick(1000,function($timer) use($ws,$request){
            $ws->push($request->fd,'现在开始进行攻击,伤害:100');
            $this->timer_id = $timer;
        });
        $timer = $this->timer_id;
        Swoole_timer_after(5000,function() use($ws,$request,$timer){
            Swoole_timer_clear($timer);
            $ws->push($request->fd,'攻击完成!成功击毙敌人');
        });
        $ws->push($request->fd,'发现敌人,准备进行攻击');
    }

结果是5000毫秒后tick没有关闭还在继续执行。我看不出哪里有什么不对
运行结果
图片描述

写回答

1回答

sindey1982

2019-04-02

小哥你的变量作用域有问题,上面的timer作用域是 闭包函数 。所以下面的use是拿不到的。你弄个外围的变量,可以是类静态 ,也可以是titck  after两个函数同级的局部变量。保存一下timeid,用这个变量清除就ok了

0
0

Swoole入门到实战打造高性能赛事直播平台

swoole创始人推荐,借助Swoole打造高性能直播平台

2228 学习 · 1062 问题

查看课程