(more) FreeBSD thread fixes
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1865 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -151,9 +151,9 @@ public:
|
|||||||
WXCRITICAL_INLINE ~wxCriticalSection();
|
WXCRITICAL_INLINE ~wxCriticalSection();
|
||||||
|
|
||||||
// enter the section (the same as locking a mutex)
|
// 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)
|
// leave the critical section (same as unlocking a mutex)
|
||||||
void WXCRITICAL_INLINE Leave();
|
WXCRITICAL_INLINE void Leave();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// no assignment operator nor copy ctor
|
// no assignment operator nor copy ctor
|
||||||
|
@@ -405,7 +405,12 @@ bool wxThread::IsMain()
|
|||||||
|
|
||||||
void wxThread::Yield()
|
void wxThread::Yield()
|
||||||
{
|
{
|
||||||
|
#ifdef HAVE_SCHED_YIELD
|
||||||
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)
|
void wxThread::Sleep(unsigned long milliseconds)
|
||||||
@@ -434,6 +439,7 @@ wxThreadError wxThread::Create()
|
|||||||
pthread_attr_t attr;
|
pthread_attr_t attr;
|
||||||
pthread_attr_init(&attr);
|
pthread_attr_init(&attr);
|
||||||
|
|
||||||
|
#ifdef HAVE_THREAD_PRIORITY_FUNCTIONS
|
||||||
int prio;
|
int prio;
|
||||||
if ( pthread_attr_getschedpolicy(&attr, &prio) != 0 )
|
if ( pthread_attr_getschedpolicy(&attr, &prio) != 0 )
|
||||||
{
|
{
|
||||||
@@ -456,6 +462,7 @@ wxThreadError wxThread::Create()
|
|||||||
(p_internal->GetPriority()*(max_prio-min_prio))/100;
|
(p_internal->GetPriority()*(max_prio-min_prio))/100;
|
||||||
pthread_attr_setschedparam(&attr, &sp);
|
pthread_attr_setschedparam(&attr, &sp);
|
||||||
}
|
}
|
||||||
|
#endif // HAVE_THREAD_PRIORITY_FUNCTIONS
|
||||||
|
|
||||||
// create the new OS thread object
|
// create the new OS thread object
|
||||||
int rc = pthread_create(&p_internal->thread_id, &attr,
|
int rc = pthread_create(&p_internal->thread_id, &attr,
|
||||||
@@ -482,8 +489,9 @@ wxThreadError wxThread::Run()
|
|||||||
|
|
||||||
void wxThread::SetPriority(unsigned int prio)
|
void wxThread::SetPriority(unsigned int prio)
|
||||||
{
|
{
|
||||||
wxCHECK_RET( (WXTHREAD_MIN_PRIORITY <= prio) &&
|
wxCHECK_RET( ((int)WXTHREAD_MIN_PRIORITY <= (int)prio) &&
|
||||||
(prio <= WXTHREAD_MAX_PRIORITY), "invalid thread priority" );
|
((int)prio <= (int)WXTHREAD_MAX_PRIORITY),
|
||||||
|
"invalid thread priority" );
|
||||||
|
|
||||||
wxCriticalSectionLocker lock(m_critsect);
|
wxCriticalSectionLocker lock(m_critsect);
|
||||||
|
|
||||||
@@ -496,6 +504,7 @@ void wxThread::SetPriority(unsigned int prio)
|
|||||||
|
|
||||||
case STATE_RUNNING:
|
case STATE_RUNNING:
|
||||||
case STATE_PAUSED:
|
case STATE_PAUSED:
|
||||||
|
#ifdef HAVE_THREAD_PRIORITY_FUNCTIONS
|
||||||
{
|
{
|
||||||
struct sched_param sparam;
|
struct sched_param sparam;
|
||||||
sparam.sched_priority = prio;
|
sparam.sched_priority = prio;
|
||||||
@@ -506,6 +515,7 @@ void wxThread::SetPriority(unsigned int prio)
|
|||||||
wxLogError(_("Failed to set thread priority %d."), prio);
|
wxLogError(_("Failed to set thread priority %d."), prio);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif // HAVE_THREAD_PRIORITY_FUNCTIONS
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case STATE_EXITED:
|
case STATE_EXITED:
|
||||||
@@ -604,7 +614,9 @@ wxThreadError wxThread::Kill()
|
|||||||
return wxTHREAD_NOT_RUNNING;
|
return wxTHREAD_NOT_RUNNING;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
#ifdef HAVE_PTHREAD_CANCEL
|
||||||
if ( pthread_cancel(p_internal->GetId()) != 0 )
|
if ( pthread_cancel(p_internal->GetId()) != 0 )
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
wxLogError(_("Failed to terminate a thread."));
|
wxLogError(_("Failed to terminate a thread."));
|
||||||
|
|
||||||
|
@@ -405,7 +405,12 @@ bool wxThread::IsMain()
|
|||||||
|
|
||||||
void wxThread::Yield()
|
void wxThread::Yield()
|
||||||
{
|
{
|
||||||
|
#ifdef HAVE_SCHED_YIELD
|
||||||
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)
|
void wxThread::Sleep(unsigned long milliseconds)
|
||||||
@@ -434,6 +439,7 @@ wxThreadError wxThread::Create()
|
|||||||
pthread_attr_t attr;
|
pthread_attr_t attr;
|
||||||
pthread_attr_init(&attr);
|
pthread_attr_init(&attr);
|
||||||
|
|
||||||
|
#ifdef HAVE_THREAD_PRIORITY_FUNCTIONS
|
||||||
int prio;
|
int prio;
|
||||||
if ( pthread_attr_getschedpolicy(&attr, &prio) != 0 )
|
if ( pthread_attr_getschedpolicy(&attr, &prio) != 0 )
|
||||||
{
|
{
|
||||||
@@ -456,6 +462,7 @@ wxThreadError wxThread::Create()
|
|||||||
(p_internal->GetPriority()*(max_prio-min_prio))/100;
|
(p_internal->GetPriority()*(max_prio-min_prio))/100;
|
||||||
pthread_attr_setschedparam(&attr, &sp);
|
pthread_attr_setschedparam(&attr, &sp);
|
||||||
}
|
}
|
||||||
|
#endif // HAVE_THREAD_PRIORITY_FUNCTIONS
|
||||||
|
|
||||||
// create the new OS thread object
|
// create the new OS thread object
|
||||||
int rc = pthread_create(&p_internal->thread_id, &attr,
|
int rc = pthread_create(&p_internal->thread_id, &attr,
|
||||||
@@ -482,8 +489,9 @@ wxThreadError wxThread::Run()
|
|||||||
|
|
||||||
void wxThread::SetPriority(unsigned int prio)
|
void wxThread::SetPriority(unsigned int prio)
|
||||||
{
|
{
|
||||||
wxCHECK_RET( (WXTHREAD_MIN_PRIORITY <= prio) &&
|
wxCHECK_RET( ((int)WXTHREAD_MIN_PRIORITY <= (int)prio) &&
|
||||||
(prio <= WXTHREAD_MAX_PRIORITY), "invalid thread priority" );
|
((int)prio <= (int)WXTHREAD_MAX_PRIORITY),
|
||||||
|
"invalid thread priority" );
|
||||||
|
|
||||||
wxCriticalSectionLocker lock(m_critsect);
|
wxCriticalSectionLocker lock(m_critsect);
|
||||||
|
|
||||||
@@ -496,6 +504,7 @@ void wxThread::SetPriority(unsigned int prio)
|
|||||||
|
|
||||||
case STATE_RUNNING:
|
case STATE_RUNNING:
|
||||||
case STATE_PAUSED:
|
case STATE_PAUSED:
|
||||||
|
#ifdef HAVE_THREAD_PRIORITY_FUNCTIONS
|
||||||
{
|
{
|
||||||
struct sched_param sparam;
|
struct sched_param sparam;
|
||||||
sparam.sched_priority = prio;
|
sparam.sched_priority = prio;
|
||||||
@@ -506,6 +515,7 @@ void wxThread::SetPriority(unsigned int prio)
|
|||||||
wxLogError(_("Failed to set thread priority %d."), prio);
|
wxLogError(_("Failed to set thread priority %d."), prio);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif // HAVE_THREAD_PRIORITY_FUNCTIONS
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case STATE_EXITED:
|
case STATE_EXITED:
|
||||||
@@ -604,7 +614,9 @@ wxThreadError wxThread::Kill()
|
|||||||
return wxTHREAD_NOT_RUNNING;
|
return wxTHREAD_NOT_RUNNING;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
#ifdef HAVE_PTHREAD_CANCEL
|
||||||
if ( pthread_cancel(p_internal->GetId()) != 0 )
|
if ( pthread_cancel(p_internal->GetId()) != 0 )
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
wxLogError(_("Failed to terminate a thread."));
|
wxLogError(_("Failed to terminate a thread."));
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user