]> git.mxchange.org Git - simgear.git/blobdiff - simgear/threads/SGThread.hxx
Update the code a bit more, add a function to retreive the last error string and...
[simgear.git] / simgear / threads / SGThread.hxx
index e22f559af7ceef71d0ae81aacd27828ac43403d7..fcbc0cb59bc61640f5f59113f9df5ce933ea1ff6 100644 (file)
@@ -67,9 +67,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 +132,14 @@ SGThread::~SGThread()
 }
 
 inline int
-SGThread::start()
+SGThread::start( unsigned cpu )
 {
     int status = pthread_create( &tid, 0, start_handler, this );
     assert( status == 0 );
+#if defined( sgi )
+    if ( !status && !cpu )
+        pthread_setrunon_np( cpu );
+#endif
     return status;
 }
 
@@ -157,7 +163,7 @@ SGThread::cancel()
  */
 class SGMutex
 {
-    friend class SGCondition;
+    friend class SGPthreadCond;
 
 public:
 
@@ -239,18 +245,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 +292,8 @@ public:
 
 private:
     // Disable copying.
-    SGCondition(const SGCondition& );
-    SGCondition& operator=(const SGCondition& );
+    SGPthreadCond(const SGPthreadCond& );
+    SGPthreadCond& operator=(const SGPthreadCond& );
 
 private:
 
@@ -297,31 +303,31 @@ private:
     pthread_cond_t cond;
 };
 
-inline SGCondition::SGCondition()
+inline SGPthreadCond::SGPthreadCond()
 {
     int status = pthread_cond_init( &cond, 0 );
     assert( status == 0 );
 }
 
-inline SGCondition::~SGCondition()
+inline SGPthreadCond::~SGPthreadCond()
 {
     int status = pthread_cond_destroy( &cond );
     assert( status == 0 );
 }
 
-inline void SGCondition::signal()
+inline void SGPthreadCond::signal()
 {
     int status = pthread_cond_signal( &cond );
     assert( status == 0 );
 }
 
-inline void SGCondition::broadcast()
+inline void SGPthreadCond::broadcast()
 {
     int status = pthread_cond_broadcast( &cond );
     assert( status == 0 );
 }
 
-inline void SGCondition::wait( SGMutex& mutex )
+inline void SGPthreadCond::wait( SGMutex& mutex )
 {
     int status = pthread_cond_wait( &cond, &mutex.mutex );
     assert( status == 0 );