mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-24 20:23:06 +00:00
bugfix: timeout
This commit is contained in:
@@ -17,6 +17,7 @@ local function suspend(co, result, command, param, size)
|
|||||||
local co_session = session_coroutine_id[co]
|
local co_session = session_coroutine_id[co]
|
||||||
local co_address = session_coroutine_address[co]
|
local co_address = session_coroutine_address[co]
|
||||||
c.send(co_address, co_session, param, size)
|
c.send(co_address, co_session, param, size)
|
||||||
|
return suspend(co, coroutine.resume(co))
|
||||||
else
|
else
|
||||||
assert(command == nil, command)
|
assert(command == nil, command)
|
||||||
session_coroutine_id[co] = nil
|
session_coroutine_id[co] = nil
|
||||||
@@ -28,15 +29,21 @@ function skynet.timeout(ti, func, ...)
|
|||||||
local session = c.command("TIMEOUT",tostring(ti))
|
local session = c.command("TIMEOUT",tostring(ti))
|
||||||
assert(session)
|
assert(session)
|
||||||
session = tonumber(session)
|
session = tonumber(session)
|
||||||
local co = coroutine.create(func)
|
local co
|
||||||
|
if select("#",...) == 0 then
|
||||||
|
co = coroutine.create(func)
|
||||||
|
else
|
||||||
|
local args = { ... }
|
||||||
|
co = coroutine.create(function()
|
||||||
|
func(unpack(args))
|
||||||
|
end)
|
||||||
|
end
|
||||||
assert(session_id_coroutine[session] == nil)
|
assert(session_id_coroutine[session] == nil)
|
||||||
session_id_coroutine[session] = co
|
session_id_coroutine[session] = co
|
||||||
suspend(co, coroutine.resume(co, ...))
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function skynet.yield()
|
function skynet.fork(func,...)
|
||||||
local session = c.command("TIMEOUT","0")
|
skynet.timeout("0", func, ...)
|
||||||
coroutine.yield("SLEEP", tonumber(session))
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function skynet.sleep(ti)
|
function skynet.sleep(ti)
|
||||||
@@ -45,6 +52,12 @@ function skynet.sleep(ti)
|
|||||||
coroutine.yield("SLEEP", tonumber(session))
|
coroutine.yield("SLEEP", tonumber(session))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function skynet.yield()
|
||||||
|
local session = c.command("TIMEOUT","0")
|
||||||
|
assert(session)
|
||||||
|
coroutine.yield("SLEEP", tonumber(session))
|
||||||
|
end
|
||||||
|
|
||||||
function skynet.register(name)
|
function skynet.register(name)
|
||||||
return c.command("REG", name)
|
return c.command("REG", name)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -3,7 +3,12 @@ local skynet = require "skynet"
|
|||||||
-- register a dummy callback function
|
-- register a dummy callback function
|
||||||
skynet.dispatch()
|
skynet.dispatch()
|
||||||
|
|
||||||
|
local function timeout(t)
|
||||||
|
print(t)
|
||||||
|
end
|
||||||
|
|
||||||
skynet.start(function()
|
skynet.start(function()
|
||||||
|
skynet.timeout(500, timeout, "Hello World")
|
||||||
for i = 1, 10 do
|
for i = 1, 10 do
|
||||||
print(i)
|
print(i)
|
||||||
skynet.sleep(100)
|
skynet.sleep(100)
|
||||||
|
|||||||
Reference in New Issue
Block a user