new task API with extraArgs

This commit is contained in:
Joe Shochet 2003-10-12 06:14:56 +00:00
parent 1b515b56ee
commit fe6d1f085a
2 changed files with 28 additions and 34 deletions

View File

@ -15,20 +15,17 @@
"""
if not name:
name = self.getUrl().cStr()
import Task
task = Task.Task(self.doTask)
task.callback = callback
task.extraArgs = extraArgs
return taskMgr.add(task, name)
task.callbackArgs = extraArgs
return taskMgr.add(task, name)
def doTask(self, task):
import Task
if self.run():
return Task.cont
if task.callback:
task.callback(*task.extraArgs)
task.callback(*task.callbackArgs)
return Task.done

View File

@ -71,6 +71,7 @@ class Task:
self.pstats = None
self.__removed = 0
self.__onDoLaterList = 0
self.extraArgs = None
def setOnDoLaterList(self, status):
self.__onDoLaterList = status
@ -121,7 +122,6 @@ class Task:
else:
return ('Task id: %s, no name' % (self.id))
def pause(delayTime):
def func(self):
if (self.time < self.delayTime):
@ -407,7 +407,14 @@ class TaskManager:
continue
return cont
def __spawnDoLater(self, task):
def doMethodLater(self, delayTime, func, taskName, extraArgs=None, uponDeath=None):
task = Task(func)
task.delayTime = delayTime
task.name = taskName
if extraArgs:
task.extraArgs = extraArgs
if uponDeath:
task.uponDeath = uponDeath
if TaskManager.notify.getDebug():
TaskManager.notify.debug('spawning doLater: %s' % (task))
# Add this task to the nameDict
@ -429,18 +436,7 @@ class TaskManager:
sentArgs = [task, task.name, task.id])
return task
def doLater(self, delayTime, task, taskName):
if TaskManager.notify.getDebug():
TaskManager.notify.debug('doLater: %s' % (taskName))
task.delayTime = delayTime
task.name = taskName
return self.__spawnDoLater(task)
def doMethodLater(self, delayTime, func, taskName):
task = Task(func)
return self.doLater(delayTime, task, taskName)
def add(self, funcOrTask, name, priority = 0):
def add(self, funcOrTask, name, priority=0, extraArgs=None, uponDeath=None):
"""
Add a new task to the taskMgr.
You can add a Task object or a method that takes one argument.
@ -448,22 +444,17 @@ class TaskManager:
if TaskManager.notify.getDebug():
TaskManager.notify.debug('add: %s' % (name))
if isinstance(funcOrTask, Task):
funcOrTask.setPriority(priority)
return self.__spawnTaskNamed(funcOrTask, name)
task = funcOrTask
elif callable(funcOrTask):
return self.__spawnMethodNamed(funcOrTask, name, priority)
task = Task(funcOrTask, priority)
else:
self.notify.error('add: Tried to add a task that was not a Task or a func')
def __spawnMethodNamed(self, func, name, priority=0):
task = Task(func, priority)
return self.__spawnTaskNamed(task, name)
def __spawnTaskNamed(self, task, name):
if TaskManager.notify.getDebug():
TaskManager.notify.debug('__spawnTaskNamed: %s' % (name))
# Init params
task.setPriority(priority)
task.name = name
if extraArgs:
task.extraArgs = extraArgs
if uponDeath:
task.uponDeath = uponDeath
# be sure to ask the globalClock for the current frame time
# rather than use a cached value; globalClock's frame time may
# have been synced since the start of this frame
@ -606,13 +597,19 @@ class TaskManager:
task.setCurrentTimeFrame(self.currentTime, self.currentFrame)
if not self.taskTimerVerbose:
# don't record timing info
ret = task(task)
if task.extraArgs:
ret = apply(task, task.extraArgs)
else:
ret = task(task)
else:
# Run the task and check the return value
if task.pstats:
task.pstats.start()
startTime = globalClock.getRealTime()
ret = task(task)
if task.extraArgs:
ret = apply(task, task.extraArgs)
else:
ret = task(task)
endTime = globalClock.getRealTime()
if task.pstats:
task.pstats.stop()