osg::ThreadCommonBase Class Reference
[Multithreading]

#include <OSGThread.h>

Inheritance diagram for osg::ThreadCommonBase:

osg::BaseThread osg::BasePThreadBase osg::BaseThreadCommonBase osg::MPBase osg::MemoryObject osg::PThreadBase osg::ExternalThread osg::Thread

List of all members.

Public Types

typedef MPThreadType Type
typedef void(* ThreadFuncF )(void *pThreadArg)

Public Member Functions

bool isInitialized (void)
Get


ChangeListgetChangeList (void)
Run


void run (void)
bool runFunction (ThreadFuncF fThreadFunc, void *pThreadArg)
Blocking


void block (void)
void unblock (void)
Helper


bool exists (void)
void terminate (void)
void kill (void)
Dump


void print (void)
Get


virtual MPTypegetType (void)
virtual const MPTypegetType (void) const
UInt32 getTypeId (void)
const Char8getCName (void) const
Reference Counting


void addRef (void)
void subRef (void)
Int32 getRefCount (void)

Static Public Member Functions

Get


static BaseThreadget (const Char8 *szName)
static BaseThreadfind (const Char8 *szName)
static BaseThreadcreate (void)
static const MPThreadTypegetClassType (void)
Get


static BaseThreadgetCurrent (void)
Join


static void join (BaseThread *pThread)
Class Get


static const MPTypegetStaticType (void)
static UInt32 getStaticTypeId (void)

Static Public Attributes

static const UInt32 InvalidAspect

Protected Types

typedef BaseThread Inherited

Protected Member Functions

Constructors


 ThreadCommonBase (void)
 ThreadCommonBase (const Char8 *szName, UInt32 uiId)
Destructor


virtual ~ThreadCommonBase (void)
Set


void setAspect (UInt32 uiAspectId)
void setChangeList (ChangeList *pChangeList)
Workproc


virtual void workProc (void)
Construction


virtual void init (void)
void setupThread (void)
void setupBlockCond (void)

Static Protected Member Functions

Class Specific


static BaseThreadcreate (const Char8 *szName, UInt32 uiId)
static void initThreading (void)
static void runWorkProc (void *pThread)
Join


static void join (BasePThreadBase *threadP)
Helper


static void * threadFunc (void *pThreadArg)
static void freeThread (void *pThread)

Protected Attributes

UInt32 _uiThreadId
bool _bInitialized
Member


UInt32 _uiAspectId
ChangeList_pChangeList
Instance Variables


void * _pThreadData [3]
pthread_t * _pThreadDesc
pthread_cond_t * _pBlockCond
pthread_mutex_t * _pBlockMutex
Class Specific


Char8_szName

Static Protected Attributes

static MPThreadType _type
static pthread_key_t _threadKey

Private Member Functions

 ThreadCommonBase (const ThreadCommonBase &source)
 prohibit default function (move to 'public' if needed)
void operator= (const ThreadCommonBase &source)
 prohibit default function (move to 'public' if needed)

Friends

class ThreadManager


Detailed Description

Definition at line 90 of file OSGThread.h.


Member Typedef Documentation

Reimplemented from osg::BaseThread.

Reimplemented in osg::PThreadBase, osg::Thread, and osg::ExternalThread.

Definition at line 109 of file OSGThread.h.

typedef MPThreadType osg::BaseThread::Type [inherited]

Reimplemented in osg::Thread, and osg::ExternalThread.

Definition at line 565 of file OSGBaseThread.h.

typedef void(* osg::BaseThreadCommonBase::ThreadFuncF)(void *pThreadArg) [inherited]


Constructor & Destructor Documentation

osg::ThreadCommonBase::ThreadCommonBase ( void   )  [protected]

ThreadCommonBase::ThreadCommonBase ( const Char8 szName,
UInt32  uiId 
) [protected]

Definition at line 85 of file OSGThread.cpp.

00086                                                        :
00087     
00088      Inherited  (szName, 
00089                  uiId  ),
00090 
00091     _uiAspectId (0     ),
00092     _pChangeList(NULL  )
00093 {
00094 }

ThreadCommonBase::~ThreadCommonBase ( void   )  [protected, virtual]

Definition at line 99 of file OSGThread.cpp.

References _pChangeList, and osg::subRefP().

00100 {
00101     subRefP(_pChangeList);
00102 }

osg::ThreadCommonBase::ThreadCommonBase ( const ThreadCommonBase source  )  [private]


Member Function Documentation

ChangeList * ThreadCommonBase::getChangeList ( void   ) 

Definition at line 77 of file OSGThread.cpp.

References _pChangeList.

00078 {
00079     return _pChangeList;
00080 }

void ThreadCommonBase::setAspect ( UInt32  uiAspectId  )  [protected]

Definition at line 107 of file OSGThread.cpp.

References _uiAspectId.

Referenced by osg::ExternalThread::initialize(), and osg::PThreadBase::runFunction().

00108 {
00109     _uiAspectId = uiAspectId;
00110 }

void ThreadCommonBase::setChangeList ( ChangeList pChangeList  )  [protected]

Definition at line 112 of file OSGThread.cpp.

References _pChangeList, and osg::setRefP().

Referenced by osg::PThreadBase::setupChangeList().

00113 {
00114     setRefP(_pChangeList, pChangeList);
00115 }

void osg::ThreadCommonBase::operator= ( const ThreadCommonBase source  )  [private]

BaseThread * BaseThread::get ( const Char8 szName  )  [static, inherited]

Reimplemented in osg::Thread, and osg::ExternalThread.

Definition at line 752 of file OSGBaseThread.cpp.

References osg::ThreadManager::getThread(), and osg::ThreadManager::the().

Referenced by osg::BaseThread::create(), osg::PointMCastConnection::initialize(), and osg::GroupMCastConnection::initialize().

00753 {
00754     return ThreadManager::the()->getThread(szName, "OSGBaseThread");
00755 }

BaseThread * BaseThread::find ( const Char8 szName  )  [static, inherited]

Reimplemented in osg::Thread, and osg::ExternalThread.

Definition at line 757 of file OSGBaseThread.cpp.

References osg::ThreadManager::findThread(), and osg::ThreadManager::the().

00758 {
00759     return ThreadManager::the()->findThread(szName);
00760 }

BaseThread * BaseThread::create ( void   )  [static, inherited]

Definition at line 762 of file OSGBaseThread.cpp.

References osg::BaseThread::get().

00763 {
00764     return BaseThread::get(NULL);
00765 }

BaseThread * BaseThread::create ( const Char8 szName,
UInt32  uiId 
) [static, protected, inherited]

Reimplemented in osg::Thread, and osg::ExternalThread.

Definition at line 839 of file OSGBaseThread.cpp.

References osg::BaseThread::BaseThread().

00840 {
00841     return new BaseThread(szName, uiId);
00842 }

const MPThreadType & BaseThread::getClassType ( void   )  [static, inherited]

Definition at line 767 of file OSGBaseThread.cpp.

References osg::BaseThread::_type.

Referenced by osg::ThreadManager::init().

00768 {
00769     return _type;
00770 }

BaseThread * BaseThread::getCurrent ( void   )  [static, inherited]

Reimplemented from osg::BasePThreadBase.

Reimplemented in osg::Thread, and osg::ExternalThread.

Definition at line 774 of file OSGBaseThread.cpp.

References osg::Directory::getCurrent().

00775 {
00776     return Inherited::getCurrent();
00777 }

void BaseThread::join ( BaseThread pThread  )  [static, inherited]

void BasePThreadBase::join ( BasePThreadBase threadP  )  [static, protected, inherited]

Definition at line 221 of file OSGBaseThread.cpp.

References osg::BasePThreadBase::_pThreadDesc.

Referenced by osg::BaseThread::join().

00222 {
00223     if(pThread != NULL && pThread->_pThreadDesc != NULL)
00224     {
00225         pthread_join(*(pThread->_pThreadDesc), NULL);
00226     }
00227 }

void BaseThread::run ( void   )  [inherited]

Definition at line 789 of file OSGBaseThread.cpp.

References osg::BasePThreadBase::runFunction(), and osg::BaseThread::runWorkProc().

00790 {
00791     Inherited::runFunction(runWorkProc, this);
00792 }

bool BaseThread::runFunction ( ThreadFuncF  fThreadFunc,
void *  pThreadArg 
) [inherited]

Reimplemented from osg::BasePThreadBase.

Definition at line 794 of file OSGBaseThread.cpp.

References osg::BasePThreadBase::runFunction().

Referenced by osg::GroupMCastConnection::initialize(), and osg::PThreadBase::runFunction().

00796 {
00797     return Inherited::runFunction(fThreadFunc, pThreadArg);
00798 }

void BaseThread::block ( void   )  [inherited]

Reimplemented from osg::BasePThreadBase.

Definition at line 802 of file OSGBaseThread.cpp.

References osg::BasePThreadBase::block().

00803 {
00804     Inherited::block();
00805 }

void BaseThread::unblock ( void   )  [inherited]

Reimplemented from osg::BasePThreadBase.

Definition at line 807 of file OSGBaseThread.cpp.

References osg::BasePThreadBase::unblock().

00808 {
00809     Inherited::unblock();
00810 }

bool BaseThread::exists ( void   )  [inherited]

Reimplemented from osg::BasePThreadBase.

Definition at line 814 of file OSGBaseThread.cpp.

References osg::BasePThreadBase::exists().

00815 {
00816     return Inherited::exists();
00817 }

void BaseThread::terminate ( void   )  [inherited]

Reimplemented from osg::BasePThreadBase.

Definition at line 820 of file OSGBaseThread.cpp.

References osg::BasePThreadBase::terminate().

Referenced by osg::BaseThread::~BaseThread().

00821 {
00822     Inherited::terminate();
00823 }

void BaseThread::kill ( void   )  [inherited]

Reimplemented from osg::BasePThreadBase.

Definition at line 825 of file OSGBaseThread.cpp.

References osg::BasePThreadBase::kill().

00826 {
00827     Inherited::kill();
00828 }

void BaseThread::print ( void   )  [inherited]

Reimplemented from osg::BasePThreadBase.

Definition at line 832 of file OSGBaseThread.cpp.

References osg::BasePThreadBase::print().

00833 {
00834     Inherited::print();
00835 }

void BaseThread::initThreading ( void   )  [static, protected, inherited]

Reimplemented in osg::Thread.

Definition at line 844 of file OSGBaseThread.cpp.

References osg::BasePThreadBase::_threadKey, FFASSERT, FINFO, and osg::BasePThreadBase::freeThread().

00845 {
00846     FINFO(("BaseThread::initThreading\n"))
00847 
00848 #if defined(OSG_USE_PTHREADS) && !defined(OSG_PTHREAD_ELF_TLS)
00849     int rc;
00850 
00851     rc = pthread_key_create(&(BaseThread::_threadKey),
00852                               BaseThread::freeThread);
00853 
00854     FFASSERT((rc == 0), 1, ("Failed to create pthread thread key\n");)
00855 #endif
00856 
00857 #if defined(OSG_USE_WINTHREADS) && defined (OSG_ASPECT_USE_LOCALSTORAGE)
00858     BaseThread::_threadKey     = TlsAlloc();
00859 
00860     FFASSERT((BaseThread::_threadKey != 0xFFFFFFFF), 1,
00861              ("Failed to alloc thread key local storage\n");)
00862 #endif
00863 }

void BaseThread::runWorkProc ( void *  pThread  )  [static, protected, inherited]

Definition at line 865 of file OSGBaseThread.cpp.

References osg::BaseThread::workProc().

Referenced by osg::Thread::run(), and osg::BaseThread::run().

00866 {
00867     if(pThread != NULL)
00868     {
00869         static_cast<BaseThread *>(pThread)->workProc();
00870     }
00871 }

void BaseThread::workProc ( void   )  [protected, virtual, inherited]

Definition at line 893 of file OSGBaseThread.cpp.

Referenced by osg::BaseThread::runWorkProc().

00894 {
00895 }

void * BasePThreadBase::threadFunc ( void *  pThreadArg  )  [static, protected, inherited]

Definition at line 114 of file OSGBaseThread.cpp.

Referenced by osg::BasePThreadBase::runFunction().

00115 {
00116     void **pArgs = (void **) pThreadArg;
00117 
00118     if(pArgs != NULL)
00119     {
00120         if(pArgs[2] != NULL)
00121         {
00122             ((BaseThread *) pArgs[2])->init();
00123 
00124             if(pArgs[0] != NULL)
00125             {
00126                 ThreadFuncF fThreadFunc = (ThreadFuncF) pArgs[0];
00127 
00128                 fThreadFunc(pArgs[1]);
00129             }
00130         }
00131     }
00132 
00133     return NULL;
00134 }

void BasePThreadBase::freeThread ( void *  pThread  )  [static, protected, inherited]

Definition at line 137 of file OSGBaseThread.cpp.

Referenced by osg::BaseThread::initThreading(), and osg::ThreadManager::shutdown().

00138 {
00139     BaseThread **pT = static_cast<BaseThread **>(pThread);
00140 
00141     delete pT;
00142 }

void BasePThreadBase::init ( void   )  [protected, virtual, inherited]

Reimplemented in osg::PThreadBase.

Definition at line 193 of file OSGBaseThread.cpp.

References osg::BaseThreadCommonBase::_bInitialized, osg::BasePThreadBase::setupBlockCond(), and osg::BasePThreadBase::setupThread().

Referenced by osg::ThreadManager::init().

00194 {
00195     if(_bInitialized == true)
00196         return;
00197 
00198     setupThread    ();
00199     setupBlockCond ();
00200 
00201     _bInitialized = true;
00202 }

void BasePThreadBase::setupThread ( void   )  [protected, inherited]

Definition at line 171 of file OSGBaseThread.cpp.

References osg::BasePThreadBase::_threadKey.

Referenced by osg::BasePThreadBase::init().

00172 {
00173 #ifdef OSG_PTHREAD_ELF_TLS
00174     _pLocalThread = static_cast<BaseThread *>(this);
00175 #else
00176     BaseThread **pThread = new BaseThread *;
00177 
00178     *pThread = (BaseThread *) this;
00179 
00180     pthread_setspecific(_threadKey, (void *) pThread);
00181 #endif
00182 }

void BasePThreadBase::setupBlockCond ( void   )  [protected, inherited]

Definition at line 184 of file OSGBaseThread.cpp.

References osg::BasePThreadBase::_pBlockCond, and osg::BasePThreadBase::_pBlockMutex.

Referenced by osg::BasePThreadBase::init().

00185 {
00186     _pBlockCond  = new pthread_cond_t;
00187     _pBlockMutex = new pthread_mutex_t;
00188 
00189     pthread_cond_init (_pBlockCond, NULL);
00190     pthread_mutex_init(_pBlockMutex, NULL);
00191 }

bool BaseThreadCommonBase::isInitialized ( void   )  [inherited]

Definition at line 73 of file OSGBaseThread.cpp.

References osg::BaseThreadCommonBase::_bInitialized.

00074 {
00075     return _bInitialized;
00076 }

const MPType & MPBase::getStaticType ( void   )  [static, inherited]

Definition at line 253 of file OSGMPBase.cpp.

References osg::MPBase::_type.

00254 {
00255     return _type;
00256 }

UInt32 MPBase::getStaticTypeId ( void   )  [static, inherited]

Definition at line 259 of file OSGMPBase.cpp.

00260 {
00261     return 0;
00262 }

MPType & MPBase::getType ( void   )  [virtual, inherited]

Definition at line 265 of file OSGMPBase.cpp.

References osg::MPBase::_type.

Referenced by osg::MPBase::getTypeId().

00266 {
00267     return _type;
00268 }

const MPType & MPBase::getType ( void   )  const [virtual, inherited]

Definition at line 271 of file OSGMPBase.cpp.

References osg::MPBase::_type.

00272 {
00273     return _type;
00274 }

UInt32 MPBase::getTypeId ( void   )  [inherited]

Definition at line 277 of file OSGMPBase.cpp.

References osg::TypeBase::getId(), and osg::MPBase::getType().

00278 {
00279     return getType().getId();
00280 }

const Char8 * MPBase::getCName ( void   )  const [inherited]

Definition at line 283 of file OSGMPBase.cpp.

References osg::MPBase::_szName.

00284 {
00285     return _szName;
00286 }

void MemoryObject::addRef ( void   )  [inherited]

void MemoryObject::subRef ( void   )  [inherited]

Definition at line 69 of file OSGMemoryObject.cpp.

References osg::MemoryObject::_refCount.

00070 {
00071     _refCount--;
00072 
00073     if(_refCount <= 0)
00074         delete this;
00075 }

Int32 MemoryObject::getRefCount ( void   )  [inherited]

Definition at line 77 of file OSGMemoryObject.cpp.

References osg::MemoryObject::_refCount.

00078 {
00079     return _refCount;
00080 }


Friends And Related Function Documentation

friend class ThreadManager [friend]

Reimplemented from osg::BaseThread.

Reimplemented in osg::PThreadBase, osg::Thread, and osg::ExternalThread.

Definition at line 146 of file OSGThread.h.


Member Data Documentation

Initial value:

Definition at line 96 of file OSGThread.h.

MPThreadType BaseThread::_type [static, protected, inherited]

Reimplemented from osg::MPBase.

Reimplemented in osg::Thread, and osg::ExternalThread.

Definition at line 631 of file OSGBaseThread.h.

Referenced by osg::BaseThread::getClassType().

pthread_key_t BasePThreadBase::_threadKey [static, protected, inherited]

void* osg::BasePThreadBase::_pThreadData[3] [protected, inherited]

pthread_t* osg::BasePThreadBase::_pThreadDesc [protected, inherited]

pthread_cond_t* osg::BasePThreadBase::_pBlockCond [protected, inherited]

pthread_mutex_t* osg::BasePThreadBase::_pBlockMutex [protected, inherited]

Definition at line 100 of file OSGBaseThread.h.

Referenced by osg::BasePThreadBase::print().

bool osg::BaseThreadCommonBase::_bInitialized [protected, inherited]

Char8* osg::MPBase::_szName [protected, inherited]


The documentation for this class was generated from the following files:

Generated on Mon Mar 17 12:04:49 2008 for OpenSG by  doxygen 1.5.5