// DESTRUCTOR //------------------------------------------------------------------------------ JobQueueRemote::~JobQueueRemote() { // signal all workers to stop - ok if this has already been done SignalStopWorkers(); // wait for workers to finish - ok if they stopped before this const size_t numWorkerThreads = m_Workers.GetSize(); for ( size_t i=0; i<numWorkerThreads; ++i ) { m_Workers[ i ]->WaitForStop(); FDELETE m_Workers[ i ]; } }
// DESTRUCTOR //------------------------------------------------------------------------------ JobQueue::~JobQueue() { // signal all workers to stop - ok if this has already been done SignalStopWorkers(); // delete incomplete jobs for ( size_t i=0; i<Node::NUM_PRIORITY_LEVELS; ++i ) { while( m_LocalAvailableJobs[ i ].GetCount() > 0 ) { Job * job = m_LocalAvailableJobs[ i ].RemoveJob(); FDELETE job; } } // wait for workers to finish - ok if they stopped before this const size_t numWorkerThreads = m_Workers.GetSize(); for ( size_t i=0; i<numWorkerThreads; ++i ) { m_Workers[ i ]->WaitForStop(); FDELETE m_Workers[ i ]; } }
// DESTRUCTOR //------------------------------------------------------------------------------ JobQueue::~JobQueue() { // signal all workers to stop - ok if this has already been done SignalStopWorkers(); // delete incomplete jobs while( m_LocalJobs_Available.GetCount() > 0 ) { Job * job = m_LocalJobs_Available.RemoveJob(); FDELETE job; } // wait for workers to finish - ok if they stopped before this const size_t numWorkerThreads = m_Workers.GetSize(); for ( size_t i=0; i<numWorkerThreads; ++i ) { m_Workers[ i ]->WaitForStop(); FDELETE m_Workers[ i ]; } ASSERT( m_CompletedJobs.IsEmpty() ); ASSERT( m_CompletedJobsFailed.IsEmpty() ); }