void wxThreadInternal::Resume() { wxCHECK_RET( m_state == STATE_PAUSED, wxT("can't resume thread which is not suspended.") ); // the thread might be not actually paused yet - if there were no call to // TestDestroy() since the last call to Pause() for example if ( IsReallyPaused() ) { wxLogTrace(TRACE_THREADS, _T("Waking up thread %ld"), THR_ID(this)); // wake up Pause() m_semSuspend.Post(); // reset the flag SetReallyPaused(false); } else { wxLogTrace(TRACE_THREADS, _T("Thread %ld is not yet really paused"), THR_ID(this)); } SetState(STATE_RUNNING); }
void MyDetachedThread::OnExit() { //wxLogTrace(wxT("thread"), wxT("Thread %ld is in OnExit"), GetId()); wxCriticalSectionLocker lock(gs_critsect); if ( !--gs_counter && !m_cancelled ) gs_cond.Post(); }
wxCondError wxConditionInternal::Broadcast() { wxCriticalSectionLocker lock(m_csWaiters); while ( m_numWaiters > 0 ) { if ( m_semaphore.Post() != wxSEMA_NO_ERROR ) return wxCOND_MISC_ERROR; m_numWaiters--; } return wxCOND_NO_ERROR; }
virtual ExitCode Entry() { //wxPrintf(wxT("Thread %lu has started running.\n"), GetId()); gs_cond.Post(); //wxPrintf(wxT("Thread %lu starts to wait...\n"), GetId()); m_mutex->Lock(); m_condition->Wait(); m_mutex->Unlock(); //wxPrintf(wxT("Thread %lu finished to wait, exiting.\n"), GetId()); return 0; }
wxCondError wxConditionInternal::Signal() { wxCriticalSectionLocker lock(m_csWaiters); if ( m_numWaiters > 0 ) { // increment the semaphore by 1 if ( m_semaphore.Post() != wxSEMA_NO_ERROR ) return wxCOND_MISC_ERROR; m_numWaiters--; } return wxCOND_NO_ERROR; }
void wxThreadInternal::Resume() { wxCHECK_RET( m_state == STATE_PAUSED, wxT("can't resume thread which is not suspended.") ); // the thread might be not actually paused yet - if there were no call to // TestDestroy() since the last call to Pause() for example if ( IsReallyPaused() ) { // wake up Pause() m_semSuspend.Post(); // reset the flag SetReallyPaused( false ); } SetState( STATE_RUNNING ); }
wxCondError wxConditionInternal::Broadcast() { wxCriticalSectionLocker lock(m_csWaiters); #if defined(__INTEL_COMPILER) && 1 /* VDM auto patch */ # pragma ivdep # pragma swp # pragma unroll # pragma prefetch # if 0 # pragma simd noassert # endif #endif /* VDM auto patch */ while ( m_numWaiters > 0 ) { if ( m_semaphore.Post() != wxSEMA_NO_ERROR ) return wxCOND_MISC_ERROR; m_numWaiters--; } return wxCOND_NO_ERROR; }