From 53797841c529c3ed2f36d2157e25f4c05f19c39e Mon Sep 17 00:00:00 2001 From: Darren Ranalli Date: Tue, 16 May 2006 23:43:42 +0000 Subject: [PATCH] first rev --- direct/src/showbase/TaskThreaded.py | 32 +++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100755 direct/src/showbase/TaskThreaded.py diff --git a/direct/src/showbase/TaskThreaded.py b/direct/src/showbase/TaskThreaded.py new file mode 100755 index 0000000000..7cc8ab508c --- /dev/null +++ b/direct/src/showbase/TaskThreaded.py @@ -0,0 +1,32 @@ +from direct.task import Task + +class TaskThreaded: + """ derive from this if you need to do a bunch of CPU-intensive + processing and you don't want to hang up the show. Lets you break + up the processing over multiple frames """ + _Serial = SerialNum() + + def __init__(self, name, threaded=True): + self._name = name + self._threaded=threaded + self._taskNames = set() + + def destroy(self): + for taskName in self._taskNames: + taskMgr.remove(taskName) + + def scheduleNext(self, callback): + if not self._threaded: + callback() + else: + taskName = ('%s-ThreadedTask-%s' % + (self._name, TaskThreaded._Serial.next())) + assert taskName not in self._taskNames + self._taskNames.add(taskName) + taskMgr.add(Functor(self._doCallback, callback, taskName), + taskName) + + def _doCallback(self, callback, taskName, task): + self._taskNames.remove(taskName) + callback() + return Task.done