// wxConditionInternal
// --------------------------------------------------------------------------
-#if defined(__WXMSW__) || defined(__OS2__) || defined(__EMX__)
// Win32 and OS/2 don't have explicit support for the POSIX condition
// variables and their events/event semaphores have quite different semantics,
// so we reimplement the conditions from scratch using the mutexes and
// semaphores
-#if defined(__OS2__) || defined(__EMX__)
-void InterlockedIncrement(LONG *num)
-{
- ::DosEnterCritSec();
- (*num)++;
- ::DosExitCritSec();
-}
-#endif
+#if defined(__WXMSW__) || defined(__OS2__) || defined(__EMX__)
class wxConditionInternal
{
wxCondError wxConditionInternal::Wait()
{
// increment the number of waiters
- ::InterlockedIncrement(&m_numWaiters);
+ {
+ wxCriticalSectionLocker lock(m_csWaiters);
+ m_numWaiters++;
+ }
m_mutex.Unlock();
wxCondError wxConditionInternal::WaitTimeout(unsigned long milliseconds)
{
- ::InterlockedIncrement(&m_numWaiters);
+ {
+ wxCriticalSectionLocker lock(m_csWaiters);
+ m_numWaiters++;
+ }
m_mutex.Unlock();
return wxCOND_NO_ERROR;
}
-#endif
+
+#endif // MSW or OS2
// ----------------------------------------------------------------------------
// wxCondition