From: Christian P. <cp...@us...> - 2005-01-28 20:23:49
|
Update of /cvsroot/pclasses/pclasses2/src/System In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5411/src/System Modified Files: Thread.common.cpp Log Message: Add support for variable Callbacks in Thread::spawn() Index: Thread.common.cpp =================================================================== RCS file: /cvsroot/pclasses/pclasses2/src/System/Thread.common.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- Thread.common.cpp 28 Jan 2005 11:36:38 -0000 1.1 +++ Thread.common.cpp 28 Jan 2005 17:36:12 -0000 1.2 @@ -27,8 +27,8 @@ class SpawnedThread: public Thread { public: - SpawnedThread(const Callback0<void>& cb, Semaphore* sem) - : Thread(true), _callback(cb.clone()), _sem(sem) + SpawnedThread(const Callback& cb, const CallbackArgs& args, Semaphore* sem) + : Thread(true), _callback(cb.clone()), _args(&args), _sem(sem) { } @@ -38,23 +38,31 @@ if(_sem) _sem->post(); - _callback->exec(); + _callback->exec(*_args); if(_sem) _sem->post(); + delete _callback; delete this; return 0; } private: - Callback0<void>* _callback; - Semaphore* _sem; + Callback* _callback; + const CallbackArgs* _args; + Semaphore* _sem; }; -void Thread::spawn(const Callback0<void>& cb, Semaphore* sem) throw(SystemError) +void Thread::spawn(const Callback& cb, Semaphore* sem) throw(SystemError) { - SpawnedThread* thr = new SpawnedThread(cb, sem); + Callback0<void>::Args args; + spawn(cb, args, sem); +} + +void Thread::spawn(const Callback& cb, const CallbackArgs& args, Semaphore* sem) throw(SystemError) +{ + SpawnedThread* thr = new SpawnedThread(cb, args, sem); thr->start(); // we don't leak the object ... it is self-deleted } |