bugfix: timeout

This commit is contained in:
云风
2012-08-13 23:28:23 +08:00
parent 2f21ccb72a
commit ce1b5046c6
2 changed files with 23 additions and 5 deletions

View File

@@ -17,6 +17,7 @@ local function suspend(co, result, command, param, size)
local co_session = session_coroutine_id[co]
local co_address = session_coroutine_address[co]
c.send(co_address, co_session, param, size)
return suspend(co, coroutine.resume(co))
else
assert(command == nil, command)
session_coroutine_id[co] = nil
@@ -28,15 +29,21 @@ function skynet.timeout(ti, func, ...)
local session = c.command("TIMEOUT",tostring(ti))
assert(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)
session_id_coroutine[session] = co
suspend(co, coroutine.resume(co, ...))
end
function skynet.yield()
local session = c.command("TIMEOUT","0")
coroutine.yield("SLEEP", tonumber(session))
function skynet.fork(func,...)
skynet.timeout("0", func, ...)
end
function skynet.sleep(ti)
@@ -45,6 +52,12 @@ function skynet.sleep(ti)
coroutine.yield("SLEEP", tonumber(session))
end
function skynet.yield()
local session = c.command("TIMEOUT","0")
assert(session)
coroutine.yield("SLEEP", tonumber(session))
end
function skynet.register(name)
return c.command("REG", name)
end

View File

@@ -3,7 +3,12 @@ local skynet = require "skynet"
-- register a dummy callback function
skynet.dispatch()
local function timeout(t)
print(t)
end
skynet.start(function()
skynet.timeout(500, timeout, "Hello World")
for i = 1, 10 do
print(i)
skynet.sleep(100)