X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fthreads%2FSGThread.hxx;h=477ca458f354b6f10807e766a00aa3f006386b1d;hb=da07871bc60569a02c1dd12aee754d5c85a55738;hp=e2fbcdfbbc60b88e6986a3ab0d0a3d68ac65feeb;hpb=cebcf6a4fc3e354fff9da92b22e6d1479959cc3e;p=simgear.git diff --git a/simgear/threads/SGThread.hxx b/simgear/threads/SGThread.hxx index e2fbcdfb..477ca458 100644 --- a/simgear/threads/SGThread.hxx +++ b/simgear/threads/SGThread.hxx @@ -16,13 +16,15 @@ // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software -// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // // $Id$ #ifndef SGTHREAD_HXX_INCLUDED #define SGTHREAD_HXX_INCLUDED 1 +#include + #include #include #include @@ -47,7 +49,7 @@ public: { CANCEL_DISABLE = 0, CANCEL_DEFERRED, - CANCEL_IMMEDIATE, + CANCEL_IMMEDIATE }; public: @@ -60,9 +62,11 @@ public: /** * Start the underlying thread of execution. + * @param cpu An optional parameter to specify on which CPU to run this + * thread (only supported on IRIX at this time). * @return Pthread error code if execution fails, otherwise returns 0. */ - int start(); + int start( unsigned cpu = 0 ); /** * Sends a cancellation request to the underlying thread. The target @@ -123,10 +127,15 @@ SGThread::~SGThread() } inline int -SGThread::start() +SGThread::start( unsigned cpu ) { int status = pthread_create( &tid, 0, start_handler, this ); assert( status == 0 ); + (void)status; +#if defined( sgi ) + if ( !status && !cpu ) + pthread_setrunon_np( cpu ); +#endif return status; } @@ -135,6 +144,7 @@ SGThread::join() { int status = pthread_join( tid, 0 ); assert( status == 0 ); + (void)status; } inline void @@ -142,6 +152,7 @@ SGThread::cancel() { int status = pthread_cancel( tid ); assert( status == 0 ); + (void)status; } /** @@ -150,7 +161,7 @@ SGThread::cancel() */ class SGMutex { - friend class SGCondition; + friend class SGPthreadCond; public: @@ -206,24 +217,28 @@ inline SGMutex::SGMutex() { int status = pthread_mutex_init( &mutex, 0 ); assert( status == 0 ); + (void)status; } inline SGMutex::~SGMutex() { int status = pthread_mutex_destroy( &mutex ); assert( status == 0 ); + (void)status; } inline void SGMutex::lock() { int status = pthread_mutex_lock( &mutex ); assert( status == 0 ); + (void)status; } inline void SGMutex::unlock() { int status = pthread_mutex_unlock( &mutex ); assert( status == 0 ); + (void)status; } /** @@ -232,18 +247,18 @@ inline void SGMutex::unlock() * A condition variable is always associated with a mutex to avoid race * conditions. */ -class SGCondition +class SGPthreadCond { public: /** * Create a new condition variable. */ - SGCondition(); + SGPthreadCond(); /** * Destroy the condition object. */ - ~SGCondition(); + ~SGPthreadCond(); /** * Wait for this condition variable to be signaled. @@ -279,8 +294,8 @@ public: private: // Disable copying. - SGCondition(const SGCondition& ); - SGCondition& operator=(const SGCondition& ); + SGPthreadCond(const SGPthreadCond& ); + SGPthreadCond& operator=(const SGPthreadCond& ); private: @@ -290,34 +305,39 @@ private: pthread_cond_t cond; }; -inline SGCondition::SGCondition() +inline SGPthreadCond::SGPthreadCond() { int status = pthread_cond_init( &cond, 0 ); assert( status == 0 ); + (void)status; } -inline SGCondition::~SGCondition() +inline SGPthreadCond::~SGPthreadCond() { int status = pthread_cond_destroy( &cond ); assert( status == 0 ); + (void)status; } -inline void SGCondition::signal() +inline void SGPthreadCond::signal() { int status = pthread_cond_signal( &cond ); assert( status == 0 ); + (void)status; } -inline void SGCondition::broadcast() +inline void SGPthreadCond::broadcast() { int status = pthread_cond_broadcast( &cond ); assert( status == 0 ); + (void)status; } -inline void SGCondition::wait( SGMutex& mutex ) +inline void SGPthreadCond::wait( SGMutex& mutex ) { int status = pthread_cond_wait( &cond, &mutex.mutex ); assert( status == 0 ); + (void)status; } #endif /* SGTHREAD_HXX_INCLUDED */