WXCRITICAL_INLINE ~wxCriticalSection();
 
     // enter the section (the same as locking a mutex)
-    void WXCRITICAL_INLINE Enter();
+    WXCRITICAL_INLINE void Enter();
     // leave the critical section (same as unlocking a mutex)
-    void WXCRITICAL_INLINE Leave();
+    WXCRITICAL_INLINE void Leave();
 
 private:
     // no assignment operator nor copy ctor
 
 
 void wxThread::Yield()
 {
+#ifdef HAVE_SCHED_YIELD
     sched_yield();
+#else // !HAVE_SCHED_YIELD
+    // may be it will have the desired effect?
+    Sleep(0);
+#endif // HAVE_SCHED_YIELD
 }
 
 void wxThread::Sleep(unsigned long milliseconds)
     pthread_attr_t attr;
     pthread_attr_init(&attr);
 
+#ifdef HAVE_THREAD_PRIORITY_FUNCTIONS
     int prio;
     if ( pthread_attr_getschedpolicy(&attr, &prio) != 0 )
     {
                            (p_internal->GetPriority()*(max_prio-min_prio))/100;
         pthread_attr_setschedparam(&attr, &sp);
     }
+#endif // HAVE_THREAD_PRIORITY_FUNCTIONS
 
     // create the new OS thread object
     int rc = pthread_create(&p_internal->thread_id, &attr,
 
 void wxThread::SetPriority(unsigned int prio)
 {
-    wxCHECK_RET( (WXTHREAD_MIN_PRIORITY <= prio) &&
-                 (prio <= WXTHREAD_MAX_PRIORITY), "invalid thread priority" );
+    wxCHECK_RET( ((int)WXTHREAD_MIN_PRIORITY <= (int)prio) &&
+                 ((int)prio <= (int)WXTHREAD_MAX_PRIORITY),
+                 "invalid thread priority" );
 
     wxCriticalSectionLocker lock(m_critsect);
 
 
         case STATE_RUNNING:
         case STATE_PAUSED:
+#ifdef HAVE_THREAD_PRIORITY_FUNCTIONS
             {
                 struct sched_param sparam;
                 sparam.sched_priority = prio;
                     wxLogError(_("Failed to set thread priority %d."), prio);
                 }
             }
+#endif // HAVE_THREAD_PRIORITY_FUNCTIONS
             break;
 
         case STATE_EXITED:
             return wxTHREAD_NOT_RUNNING;
 
         default:
+#ifdef HAVE_PTHREAD_CANCEL
             if ( pthread_cancel(p_internal->GetId()) != 0 )
+#endif
             {
                 wxLogError(_("Failed to terminate a thread."));
 
 
 
 void wxThread::Yield()
 {
+#ifdef HAVE_SCHED_YIELD
     sched_yield();
+#else // !HAVE_SCHED_YIELD
+    // may be it will have the desired effect?
+    Sleep(0);
+#endif // HAVE_SCHED_YIELD
 }
 
 void wxThread::Sleep(unsigned long milliseconds)
     pthread_attr_t attr;
     pthread_attr_init(&attr);
 
+#ifdef HAVE_THREAD_PRIORITY_FUNCTIONS
     int prio;
     if ( pthread_attr_getschedpolicy(&attr, &prio) != 0 )
     {
                            (p_internal->GetPriority()*(max_prio-min_prio))/100;
         pthread_attr_setschedparam(&attr, &sp);
     }
+#endif // HAVE_THREAD_PRIORITY_FUNCTIONS
 
     // create the new OS thread object
     int rc = pthread_create(&p_internal->thread_id, &attr,
 
 void wxThread::SetPriority(unsigned int prio)
 {
-    wxCHECK_RET( (WXTHREAD_MIN_PRIORITY <= prio) &&
-                 (prio <= WXTHREAD_MAX_PRIORITY), "invalid thread priority" );
+    wxCHECK_RET( ((int)WXTHREAD_MIN_PRIORITY <= (int)prio) &&
+                 ((int)prio <= (int)WXTHREAD_MAX_PRIORITY),
+                 "invalid thread priority" );
 
     wxCriticalSectionLocker lock(m_critsect);
 
 
         case STATE_RUNNING:
         case STATE_PAUSED:
+#ifdef HAVE_THREAD_PRIORITY_FUNCTIONS
             {
                 struct sched_param sparam;
                 sparam.sched_priority = prio;
                     wxLogError(_("Failed to set thread priority %d."), prio);
                 }
             }
+#endif // HAVE_THREAD_PRIORITY_FUNCTIONS
             break;
 
         case STATE_EXITED:
             return wxTHREAD_NOT_RUNNING;
 
         default:
+#ifdef HAVE_PTHREAD_CANCEL
             if ( pthread_cancel(p_internal->GetId()) != 0 )
+#endif
             {
                 wxLogError(_("Failed to terminate a thread."));