X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fthreads%2FSGThread.hxx;h=477ca458f354b6f10807e766a00aa3f006386b1d;hb=6a07c2282673562f67d12d31cd618be85d80f45a;hp=0eb935c1637d437407373e754e1fc8ce398eea3f;hpb=dfbcb1566b8b62a153a5a4e4f1cf1b9c7ea2f73e;p=simgear.git diff --git a/simgear/threads/SGThread.hxx b/simgear/threads/SGThread.hxx index 0eb935c1..477ca458 100644 --- a/simgear/threads/SGThread.hxx +++ b/simgear/threads/SGThread.hxx @@ -16,7 +16,7 @@ // // 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$ @@ -26,13 +26,8 @@ #include #include -#if defined ( SG_HAVE_STD_INCLUDES ) -# include -# include -#else -# include -# include -#endif +#include +#include class SGThread; @@ -54,7 +49,7 @@ public: { CANCEL_DISABLE = 0, CANCEL_DEFERRED, - CANCEL_IMMEDIATE, + CANCEL_IMMEDIATE }; public: @@ -67,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 @@ -130,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; } @@ -142,6 +144,7 @@ SGThread::join() { int status = pthread_join( tid, 0 ); assert( status == 0 ); + (void)status; } inline void @@ -149,6 +152,7 @@ SGThread::cancel() { int status = pthread_cancel( tid ); assert( status == 0 ); + (void)status; } /** @@ -157,7 +161,7 @@ SGThread::cancel() */ class SGMutex { - friend class SGCondition; + friend class SGPthreadCond; public: @@ -213,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; } /** @@ -239,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. @@ -286,8 +294,8 @@ public: private: // Disable copying. - SGCondition(const SGCondition& ); - SGCondition& operator=(const SGCondition& ); + SGPthreadCond(const SGPthreadCond& ); + SGPthreadCond& operator=(const SGPthreadCond& ); private: @@ -297,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 */