Changeset 52

Show
Ignore:
Timestamp:
01/23/05 07:26:46 (18 years ago)
Author:
wagi
Message:

Added kamikazzi functor (destroyCall) and sleepin functor

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/freebob/src/threads.h

    r41 r52  
    130130//////////////////////////////////////////////////////////////////////// 
    131131 
     132template< typename CalleePtr > 
     133class DestroyFunctor 
     134    : public Functor 
     135{ 
     136public: 
     137    DestroyFunctor( const CalleePtr& pCallee,  
     138                    bool bDelete = true ) 
     139        : m_pCallee( pCallee ) 
     140        , m_bDelete( bDelete ) 
     141        {} 
     142 
     143    virtual ~DestroyFunctor() 
     144        {} 
     145 
     146    virtual void operator() () 
     147        {  
     148            delete m_pCallee; 
     149             
     150            if (m_bDelete) { 
     151                delete this; 
     152            } 
     153        } 
     154 
     155private: 
     156    CalleePtr  m_pCallee; 
     157    bool       m_bDelete; 
     158}; 
     159 
     160//////////////////////////////////////////////////////////////////////// 
     161 
    132162// 0 params 
    133163template< typename CalleePtr, typename Callee,  typename Ret > 
     
    184214} 
    185215 
     216//////////////////////////////////////////////////////////////////////// 
     217 
     218// 0 params 
     219template< typename CalleePtr, typename Callee,  typename Ret > 
     220inline void sleepCall( const CalleePtr& pCallee, 
     221                       Ret( Callee::*pFunction )( ) ) 
     222{ 
     223    WorkerThread::instance()->addFunctor(new MemberFunctor0< CalleePtr, Ret ( Callee::* )( ) > ( pCallee,  pFunction ), true); 
     224} 
     225 
     226// 1 params 
     227template< typename CalleePtr, typename Callee, typename Ret, typename Parm0 > 
     228inline void sleepCall( const CalleePtr& pCallee, 
     229                       Ret( Callee::*pFunction )( Parm0 ), 
     230                       Parm0 parm0 ) 
     231{ 
     232    WorkerThread::instance()->addFunctor(new MemberFunctor1< CalleePtr, Ret ( Callee::* )( Parm0 ), Parm0 > ( pCallee,  pFunction, parm0 ), true); 
     233} 
     234 
     235//////////////////////////////////////////////////////////////////////// 
     236 
     237// 0 params 
     238template< typename CalleePtr > 
     239inline void destroyCall( const CalleePtr& pCallee ) 
     240{ 
     241    WorkerThread::instance()->addFunctor(new DestroyFunctor< CalleePtr> ( pCallee)); 
     242} 
     243 
     244 
    186245#endif 
    187246