|
本帖最后由 Blz1225 于 2020-7-28 18:40 编辑
重制版编辑器的函数有BUG:无法超过约50000个操作。也就是函数总操作次数无法超过约50000个,包括调用其他函数等,如果操作比较复杂,例如有乘法、除法、Sin、Cos,总操作数会更少。导致的问题就是,一些操作比较多的函数,会被强制退出,导致功能失效。
以下是测试数据:
情况1:
调用tst0()后,最后打印的信息是:"i0=50500",说明tst0()本应执行10w次,结果却执行了5w+次,说明这里tst0()被强制退出了。
function tst1 takes nothing returns nothing
// empty function
endfunction
function tst0 takes nothing returns nothing
local integer i0
set i0=0
loop
exitwhen i0==100000
if modi(i0,100)==0 then
call msg("i0="+i2s(i0))
endif
call tst1()
set i0=i0+1
endloop
endfunction
情况2:
调用tst0()后,最后打印的信息是:"i0=48900",说明tst0()执行一定的次数后,被强制退出了。
function tst1 takes nothing returns nothing
local integer i0=0
local integer i1=0
set i0=i1
endfunction
function tst0 takes nothing returns nothing
local integer i0
set i0=0
loop
exitwhen i0==100000
if modi(i0,100)==0 then
call msg("i0="+i2s(i0))
endif
call tst1()
set i0=i0+1
endloop
endfunction
情况3:
调用tst0()后,最后打印的信息是:"i0=33000",说明tst0()执行一定的次数后,被强制退出了。
function tst1 takes nothing returns nothing
local integer i0=0
local integer i1=0
set i1=R2I(Sin(i0))+powi(i0,3)+3*i0+10
endfunction
function tst0 takes nothing returns nothing
local integer i0
set i0=0
loop
exitwhen i0==100000
if modi(i0,100)==0 then
call msg("i0="+i2s(i0))
endif
call tst1()
set i0=i0+1
endloop
endfunction
情况4:
调用tst0()后,最后打印的信息是:"i0=3600",说明tst0()执行一定的次数后,被强制退出了。
function tst1 takes nothing returns nothing
local integer i0=0
local integer i1=0
set i1=R2I(Sin(i0))+powi(i0,3)+3*i0+10
set i1=R2I(Sin(i0))+powi(i0,3)+3*i0+10
set i1=R2I(Sin(i0))+powi(i0,3)+3*i0+10
set i1=R2I(Sin(i0))+powi(i0,3)+3*i0+10
set i1=R2I(Sin(i0))+powi(i0,3)+3*i0+10
set i1=R2I(Sin(i0))+powi(i0,3)+3*i0+10
set i1=R2I(Sin(i0))+powi(i0,3)+3*i0+10
set i1=R2I(Sin(i0))+powi(i0,3)+3*i0+10
set i1=R2I(Sin(i0))+powi(i0,3)+3*i0+10
set i1=R2I(Sin(i0))+powi(i0,3)+3*i0+10
set i1=R2I(Sin(i0))+powi(i0,3)+3*i0+10
set i1=R2I(Sin(i0))+powi(i0,3)+3*i0+10
set i1=R2I(Sin(i0))+powi(i0,3)+3*i0+10
set i1=R2I(Sin(i0))+powi(i0,3)+3*i0+10
set i1=R2I(Sin(i0))+powi(i0,3)+3*i0+10
set i1=R2I(Sin(i0))+powi(i0,3)+3*i0+10
endfunction
function tst0 takes nothing returns nothing
local integer i0
set i0=0
loop
exitwhen i0==100000
if modi(i0,100)==0 then
call msg("i0="+i2s(i0))
endif
call tst1()
set i0=i0+1
endloop
endfunction
|
|