X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/afb7489128719ac8999b037d49a0c28636d59558..c13cace12594b37706e9520a6fbd602c949f8127:/src/gtk/threadpsx.cpp?ds=sidebyside diff --git a/src/gtk/threadpsx.cpp b/src/gtk/threadpsx.cpp index a5732e3aee..99239908ef 100644 --- a/src/gtk/threadpsx.cpp +++ b/src/gtk/threadpsx.cpp @@ -24,6 +24,11 @@ #include #endif +#ifdef __SUN__ +extern int usleep(unsigned int useconds); +#endif + + #include "wx/thread.h" #include "wx/module.h" #include "wx/utils.h" @@ -405,7 +410,12 @@ bool wxThread::IsMain() 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) @@ -434,6 +444,7 @@ wxThreadError wxThread::Create() pthread_attr_t attr; pthread_attr_init(&attr); +#ifdef HAVE_THREAD_PRIORITY_FUNCTIONS int prio; if ( pthread_attr_getschedpolicy(&attr, &prio) != 0 ) { @@ -456,6 +467,7 @@ wxThreadError wxThread::Create() (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, @@ -482,8 +494,9 @@ wxThreadError wxThread::Run() 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); @@ -496,6 +509,7 @@ void wxThread::SetPriority(unsigned int prio) case STATE_RUNNING: case STATE_PAUSED: +#ifdef HAVE_THREAD_PRIORITY_FUNCTIONS { struct sched_param sparam; sparam.sched_priority = prio; @@ -506,6 +520,7 @@ void wxThread::SetPriority(unsigned int prio) wxLogError(_("Failed to set thread priority %d."), prio); } } +#endif // HAVE_THREAD_PRIORITY_FUNCTIONS break; case STATE_EXITED: @@ -604,7 +619,9 @@ wxThreadError wxThread::Kill() return wxTHREAD_NOT_RUNNING; default: +#ifdef HAVE_PTHREAD_CANCEL if ( pthread_cancel(p_internal->GetId()) != 0 ) +#endif { wxLogError(_("Failed to terminate a thread."));