Code: Select all
Structure TASK_INFO
function.l
lastTimeMs.l
delayMs.l
autoremove.b
parameter.l
useParam.b
EndStructure
Global NewList TaskList.TASK_INFO()
Procedure RegisterTask(*func,delay.l,autoremove.b)
AddElement(TaskList())
TaskList()\function=*func
TaskList()\delayms=delay
TaskList()\lastTimeMs=ElapsedMilliseconds()-1
TaskList()\autoremove=autoremove
EndProcedure
Procedure RegisterTaskEx(*func,delay.l,autoremove.b,parameter.l)
AddElement(TaskList())
TaskList()\function=*func
TaskList()\delayms=delay
TaskList()\lastTimeMs=ElapsedMilliseconds()-1
TaskList()\parameter=parameter
TaskList()\useparam=1
TaskList()\autoremove=autoremove
EndProcedure
Procedure RunTasks(nowMs.l)
ForEach TaskList()
If nowMs - TaskList()\lastTimeMs >= TaskList()\delayMs
If TaskList()\UseParam
CallFunctionFast(TaskList()\function,TaskList()\parameter)
Else
CallFunctionFast(TaskList()\function)
EndIf
TaskList()\lastTimeMs=nowMs
EndIf
Next
ForEach TaskList()
If TaskList()\autoremove And TaskList()\lastTimeMs=nowMs
DeleteElement(TaskList())
EndIf
Next
EndProcedure