skynet.sleep分析

本文深入解析skynet.sleep的内部实现,该API用于挂起coroutine并使用定时器在指定时间后唤醒。skynet.sleep通过skynet_timeout在C层面注册定时器,并在时间到时发送PTYPE_RESPONSE消息唤醒协程。同时提到了skynet.wakeup的作用及其与skynet.sleep的交互。
摘要由CSDN通过智能技术生成

官方文档

skynet.sleep(ti) 将当前 coroutine 挂起 ti 个单位时间。一个单位是 1/100 秒。它是向框架注册一个定时器实现的。框架会在 ti 时间后,发送一个定时器消息来唤醒这个 coroutine 。这是一个阻塞 API 。它的返回值会告诉你是时间到了(返回nil),还是被 skynet.wakeup 唤醒 (返回 “BREAK”)。

Code

function skynet.sleep(ti)
    local session = c.intcommand("TIMEOUT",ti)
    assert(session)
    local succ, ret = coroutine_yield("SLEEP", session)
    sleep_session[coroutine.running()] = nil
    if succ then
        return
    end
    if ret == "BREAK" then
        return "BREAK"
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值