找回密码
 点一下
查看: 3455|回复: 0

简单的timer系统(GC,数组两版……)

  [复制链接]
发表于 2009-9-6 09:42:29 | 显示全部楼层 |阅读模式
用GC做存储的系统的话
很容易因为使用过多的计时器而导致string泄露
恩恩……
这个泄露实际上就是用了过多的timer
于是用于存储的handle值字符串过多而出现的
于是做了个简单的系统:
[jass]
globals  
integer udg_Head = 0
integer udg_Exist = 0
timer array udg_TimerList
endglobals
function LoadTimer takes nothing returns timer
    set udg_TimerList[udg_Head] = null
    if udg_Exist == 0 then
        return CreateTimer()
    endif   
    set udg_Head = udg_Head + 1
    if udg_Head == 8190 then
        set udg_Head = 0
    endif
    set udg_Exist = udg_Exist - 1
    return udg_TimerList[udg_Head]
endfunction
function SaveTimer takes timer t returns nothing
    if udg_Exist == 8190 then
        call DestroyTimer(t)
        return
    endif
    set udg_TimerList[(udg_Head + udg_Exist) - (udg_Head + udg_Exist) / 8190 * 8190] = t
    set udg_Exist = udg_Exist + 1
endfunction
[/jass]
如以上函数
使用也很简单
用LoadTimer获得timer
用SaveTimer排泄即可

如果想使用数组的存储系统
[jass]
globals  
integer udg_Head = 0
integer udg_UsedTimerNum = -1
timer array udg_UseTimer
timer array udg_TimerList
endglobals
function StartDoing takes nothing returns nothing
    local integer i = 0
    loop
        set udg_UseTimer = CreateTimer()
        set i = i + 1
        exitwhen i == 8190
    endloop
endfunction
function LoadTimer takes nothing returns timer
    if udg_Head == 0 then
        if udg_UsedTimerNum == 8190 then
            return null
        endif
        set udg_UsedTimerNum = udg_UsedTimerNum + 1
        return udg_UseTimer[udg_UsedTimerNum]
    endif   
    set udg_Head = udg_Head - 1
    return udg_TimerList[udg_Head]
endfunction
function SaveTimer takes timer t returns nothing
    call PauseTimer(t)
    set udg_TimerList[udg_Head] = t
    set udg_Head = udg_Head + 1
endfunction[/jass]

游戏初始化时执行StartDoing,
此系统存储结构类似handle,有数组8192上限
然后使用方法同GC的
用获得的timer的handle值对8190的模的余数作为存储数组的序号即可

GC版无同时运行timer上限,数组的有8191个timer为上限

以上函数未经测试……
纯属虚构……
如有问题……
纯属失误……

评分

参与人数 2威望 +7 收起 理由
alexries + 2 消掉多加的分。
masker0925 + 5 不错的教程

查看全部评分

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-4-19 21:53 , Processed in 0.105702 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表