mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-10-29 16:58:06 +00:00
Formidastic, now when nillifying the Test1 and Test 3, the destructor of the SCHEDULER is called
The references of nillified and garbage collected SCHEDULERS are removed from the _TIMERDISPATCHER. This results now in schedules that are still pending to be executed, but are nillified, that these schedules will never be executed!!! Sven
This commit is contained in:
@@ -69,11 +69,17 @@ function SCHEDULER:New( TimeEventObject, TimeEventFunction, TimeEventFunctionArg
|
||||
|
||||
self.StartTime = timer.getTime()
|
||||
|
||||
_TIMERDISPATCHER:AddSchedule( self )
|
||||
self.CallID = _TIMERDISPATCHER:AddSchedule( self )
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
function SCHEDULER:_Destructor()
|
||||
--self:E("_Destructor")
|
||||
|
||||
_TIMERDISPATCHER:RemoveSchedule( self.CallID )
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -89,4 +95,3 @@ end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -33,30 +33,26 @@ end
|
||||
-- @param #TIMER self
|
||||
-- @param Core.Scheduler#SCHEDULER Scheduler
|
||||
function TIMER:AddSchedule( Scheduler )
|
||||
self:F3( { Scheduler = Scheduler } )
|
||||
self:F3( { Scheduler } )
|
||||
|
||||
-- Initialize the Functions array, which is a weakly coupled table.
|
||||
-- If the object used as the key is nil, then the garbage collector will remove the item from the Functions array.
|
||||
self.Schedulers = self.Schedulers or setmetatable( {}, { __mode = "k" } )
|
||||
self.Schedulers = self.Schedulers or setmetatable( {}, { __mode = "v" } )
|
||||
|
||||
self.CallID = self.CallID + 1
|
||||
self.Schedulers[Scheduler] = self.CallID
|
||||
self.Schedulers[self.CallID] = Scheduler
|
||||
|
||||
self:E(self.Schedulers)
|
||||
Scheduler:E( { self.CallID, self.Schedulers[self.CallID] } )
|
||||
|
||||
self.Schedule = self.Schedule or setmetatable( {}, { __mode = "v" } )
|
||||
|
||||
|
||||
self.Schedule[self.CallID] = {}
|
||||
|
||||
self.Schedule[self.CallID].ScheduleFunction = Scheduler.TimeEventFunction
|
||||
self.Schedule[self.CallID].ScheduleArguments = Scheduler.TimeEventFunctionArguments
|
||||
self.Schedule[self.CallID].ScheduleObject = Scheduler.TimeEventObject
|
||||
self.Schedule[self.CallID].ScheduleStart = Scheduler.StartSeconds + .001
|
||||
self.Schedule[self.CallID].ScheduleStart = Scheduler.StartSeconds + .001
|
||||
|
||||
self:E( self.Schedule[self.CallID] )
|
||||
|
||||
local function ScheduleCallHandler( CallID )
|
||||
self.Schedule[self.CallID].ScheduleCallHandler = function( CallID )
|
||||
self:E( CallID )
|
||||
|
||||
local ErrorHandler = function( errmsg )
|
||||
env.info( "Error in timer function: " .. errmsg )
|
||||
@@ -66,11 +62,9 @@ function TIMER:AddSchedule( Scheduler )
|
||||
return errmsg
|
||||
end
|
||||
|
||||
BASE:E( { self } )
|
||||
|
||||
local ScheduleFunction = self.Schedule[CallID].ScheduleFunction
|
||||
local ScheduleArguments = self.Schedule[CallID].ScheduleArguments
|
||||
local ScheduleObject = self.Schedule[CallID].ScheduleObject
|
||||
local ScheduleFunction = self.Schedulers[CallID].TimeEventFunction
|
||||
local ScheduleArguments = self.Schedulers[CallID].TimeEventFunctionArguments
|
||||
local ScheduleObject = self.Schedulers[CallID].TimeEventObject
|
||||
|
||||
local Status, Result
|
||||
if ScheduleObject then
|
||||
@@ -87,7 +81,7 @@ function TIMER:AddSchedule( Scheduler )
|
||||
end
|
||||
|
||||
timer.scheduleFunction(
|
||||
ScheduleCallHandler,
|
||||
self.Schedule[self.CallID].ScheduleCallHandler,
|
||||
self.CallID,
|
||||
timer.getTime() + 1
|
||||
)
|
||||
@@ -100,5 +94,12 @@ function TIMER:AddSchedule( Scheduler )
|
||||
return self.CallID
|
||||
end
|
||||
|
||||
function TIMER:RemoveSchedule( CallID )
|
||||
|
||||
self:F( CallID )
|
||||
self.Schedulers[CallID] = nil
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user