Changeset 37
- Timestamp:
- 11/29/04 14:25:03 (19 years ago)
- Files:
-
- trunk/freebob/src/threads.h (modified) (6 diffs)
- trunk/freebob/src/workerthread.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/freebob/src/threads.h
r29 r37 22 22 #define THREADS_H 23 23 24 #include <semaphore.h> 25 24 26 #include "workerthread.h" 25 27 … … 37 39 { 38 40 public: 39 MemberFunctor0( const CalleePtr& pCallee, MemFunPtr pMemFun ) 41 MemberFunctor0( const CalleePtr& pCallee, 42 MemFunPtr pMemFun, 43 bool bDelete = true ) 40 44 : m_pCallee( pCallee ) 41 45 , m_pMemFun( pMemFun ) 46 , m_pSem( 0 ) 47 , m_bDelete( bDelete ) 42 48 {} 49 50 MemberFunctor0( const CalleePtr& pCallee, 51 MemFunPtr pMemFun, 52 sem_t* pSem, 53 bool bDelete = true ) 54 : m_pCallee( pCallee ) 55 , m_pMemFun( pMemFun ) 56 , m_pSem( pSem ) 57 , m_bDelete( bDelete ) 58 {} 59 43 60 virtual ~MemberFunctor0() 44 61 {} 45 62 46 63 virtual void operator() () 47 { ( ( *m_pCallee ).*m_pMemFun )(); } 64 { 65 ( ( *m_pCallee ).*m_pMemFun )(); 66 if ( m_pSem ) { 67 sem_post( m_pSem); 68 } 69 if (m_bDelete) { 70 delete this; 71 } 72 } 48 73 49 74 private: 50 75 CalleePtr m_pCallee; 51 76 MemFunPtr m_pMemFun; 77 sem_t* m_pSem; 78 bool m_bDelete; 52 79 }; 53 80 … … 57 84 { 58 85 public: 59 MemberFunctor1( const CalleePtr& pCallee, MemFunPtr pMemFun, Parm0 parm0 ) 86 MemberFunctor1( const CalleePtr& pCallee, 87 MemFunPtr pMemFun, 88 Parm0 parm0, 89 bool bDelete = true) 60 90 : m_pCallee( pCallee ) 61 91 , m_pMemFun( pMemFun ) 62 92 , m_parm0( parm0 ) 93 , m_pSem( 0 ) 94 , m_bDelete( bDelete ) 95 {} 96 97 MemberFunctor1( const CalleePtr& pCallee, 98 MemFunPtr pMemFun, 99 Parm0 parm0, 100 sem_t* pSem, 101 bool bDelete = true ) 102 : m_pCallee( pCallee ) 103 , m_pMemFun( pMemFun ) 104 , m_parm0( parm0 ) 105 , m_pSem( 0 ) 106 , m_bDelete( bDelete ) 63 107 {} 64 108 virtual ~MemberFunctor1() … … 66 110 67 111 virtual void operator() () 68 { ( ( *m_pCallee ).*m_pMemFun )( m_parm0 ); } 112 { 113 ( ( *m_pCallee ).*m_pMemFun )( m_parm0 ); 114 if (bDelete) { 115 delete this; 116 } 117 } 69 118 70 119 private: … … 72 121 MemFunPtr m_pMemFun; 73 122 Parm0 m_parm0; 123 sem_t* m_pSem; 124 bool m_bDelete; 74 125 }; 75 126 … … 99 150 template< typename CalleePtr, typename Callee, typename Ret > 100 151 inline void asyncCall( const CalleePtr& pCallee, 101 152 Ret( Callee::*pFunction )( ) ) 102 153 { 103 154 WorkerThread::instance()->addFunctor(new MemberFunctor0< CalleePtr, Ret ( Callee::* )( ) > ( pCallee, pFunction )); 104 155 } 105 156 157 //////////////////////////////////////////////////////////////////////// 158 159 template< typename CalleePtr, typename Callee, typename Ret > 160 inline void syncCall( const CalleePtr& pCallee, 161 Ret( Callee::*pFunction )( ) ) 162 { 163 sem_t sem; 164 sem_init( &sem, 1, 0 ); 165 166 WorkerThread::instance()->addFunctor(new MemberFunctor0< CalleePtr, Ret ( Callee::* )( ) > ( pCallee, pFunction, &sem )); 167 168 sem_wait( &sem ); 169 sem_destroy( &sem ); 170 } 171 106 172 #endif 173 174 trunk/freebob/src/workerthread.cpp
r34 r37 85 85 86 86 ( *pFunctor )(); 87 delete pFunctor;88 87 89 88 pthread_testcancel();