Lua开发者运行: 4197天

如何使用Lua编写模拟线程、定时、以及阻塞

作者:LuaStudio 发布于:2015-12-28 9:25 Monday 分类:心得体会

我们在使用Lua开发网络游戏时、尤其进入剧情副本时、我们希望能够这样编写代码!

当副本进行中
        刷怪 <刷第几轮的怪物>
        实时监测第一波怪物是否被杀光
结束


function StartCopyScene()
        local iSceneStep = 1
        while true do
                ShuaGuai(iSceneStep)
                
                while true do
                        if CheckAllMonsterDie() then
                                iSceneStep = iSceneStep+1
                        else
                                Sleep(1)
                                break
                        end
                end
        end
end


翻译成代码就是这样、然而并没什么卵用! 如此阻塞、循环、主线程咋办、其他逻辑咋办?

 这时候我们就要考虑到强大的协程了、它能模拟各种线程阻塞等各种操作、


-- Simple Coroutines System

g_SCSMoc = {}
g_SCSMoc.co_list_ = {}


function g_SCSMoc.CreateThread(f, param)
        table.insert(g_SCSMoc.co_list_,{coroutine.create(f), param})
end

function g_SCSMoc.Sleep(time)
        if time~=nil then
                local co = g_SCSMoc.running
                co.wake_time = g_SCSMoc.now + time
        end
        coroutine.yield()
end

function g_SCSMoc.Run()
        遍历列表、按需要执行
end

这样,我们便能实现全部功能啦,是否很强大!

热烈欢迎各位留言,本人会虚心听取各位意见!