]> git.mxchange.org Git - simgear.git/blobdiff - simgear/threads/SGThread.hxx
MINGW patch from BenoƮt Laniel
[simgear.git] / simgear / threads / SGThread.hxx
index fd7d4e660fbaac5c50cd419a590e9700e2b066bc..477ca458f354b6f10807e766a00aa3f006386b1d 100644 (file)
@@ -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$
 
 #include <simgear/compiler.h>
 
 #include <pthread.h>
-#if defined ( SG_HAVE_STD_INCLUDES )
-#  include <cassert>
-#  include <cerrno>
-#else
-#  include <assert.h>
-#  include <sys/errno.h>
-#endif
+#include <cassert>
+#include <cerrno>
 
 class SGThread;
 
@@ -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;
 }
 
 /**
@@ -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;
 }
 
 /**
@@ -301,30 +309,35 @@ inline SGPthreadCond::SGPthreadCond()
 {
     int status = pthread_cond_init( &cond, 0 );
     assert( status == 0 );
+    (void)status;
 }
 
 inline SGPthreadCond::~SGPthreadCond()
 {
     int status = pthread_cond_destroy( &cond );
     assert( status == 0 );
+    (void)status;
 }
 
 inline void SGPthreadCond::signal()
 {
     int status = pthread_cond_signal( &cond );
     assert( status == 0 );
+    (void)status;
 }
 
 inline void SGPthreadCond::broadcast()
 {
     int status = pthread_cond_broadcast( &cond );
     assert( status == 0 );
+    (void)status;
 }
 
 inline void SGPthreadCond::wait( SGMutex& mutex )
 {
     int status = pthread_cond_wait( &cond, &mutex.mutex );
     assert( status == 0 );
+    (void)status;
 }
 
 #endif /* SGTHREAD_HXX_INCLUDED */