#include "wx/thread.h"
#ifdef __WXMAC__
-#ifndef __DARWIN__
#include <Threads.h>
-#endif
#include "wx/mac/uma.h"
#endif
wxMacStCritical critical ;
if ( UMASystemIsInitialized() )
{
- OSErr err ;
ThreadID current = kNoThreadID;
::MacGetCurrentThread(¤t);
// if we are not the owner, give an error back
class wxConditionInternal
{
public:
- wxConditionInternal()
+ wxConditionInternal(wxMutex& mutex) : m_mutex(mutex)
{
m_excessSignals = 0 ;
}
wxArrayLong m_waiters ;
wxInt32 m_excessSignals ;
+ wxMutex& m_mutex;
};
-wxCondition::wxCondition()
+wxCondition::wxCondition(wxMutex& mutex)
{
- m_internal = new wxConditionInternal;
+ m_internal = new wxConditionInternal(mutex);
}
wxCondition::~wxCondition()
(void)m_internal->Wait(0xFFFFFFFFL);
}
-bool wxCondition::Wait(unsigned long sec,
- unsigned long nsec)
+bool wxCondition::Wait(unsigned long timeout_millis)
{
- return m_internal->Wait(sec*1000 + nsec/1000000);
+ return m_internal->Wait(timeout_millis);
}
void wxCondition::Signal()
// this works because all these threads are already waiting and so each
// SetEvent() inside Signal() is really a PulseEvent() because the event
// state is immediately returned to non-signaled
- for ( int i = 0; i < m_internal->m_waiters.Count(); i++ )
+ for ( size_t i = 0; i < m_internal->m_waiters.Count(); i++ )
{
Signal();
}
err = MacGetCurrentThread( ¤t ) ;
- for ( int i = 0 ; i < s_threads.Count() ; ++i )
+ for ( size_t i = 0 ; i < s_threads.Count() ; ++i )
{
if ( ( (wxThread*) s_threads[i] )->GetId() == current )
return (wxThread*) s_threads[i] ;