void AsyncByteStream::Open(std::ios::openmode mode) { if ( (mode & std::ios::in) == std::ios::in ) { _readbuf = std::make_shared<RingBuffer>(_bufsize); } if ( (mode & std::ios::out) == std::ios::out ) { _writebuf = std::make_shared<RingBuffer>(_bufsize); } if ( _targetRunLoop != nullptr ) ReadyToRun(); }
void NonBlockingAlgorithm::StartAlgorithm() { if ( !ReadyToRun() ) return; // let algorithm check if all input/parameters are ok if (m_KillRequest) return; // someone wants us to die m_ParameterListMutex->Lock(); m_ThreadParameters.m_Algorithm = this; ++m_UpdateRequests; m_ParameterListMutex->Unlock(); if (m_ThreadID != -1) // thread already running. But something obviously wants us to recalculate the output { return; // thread already running } // spawn a thread that calls ThreadedUpdateFunction(), and ThreadedUpdateFinished() on us itk::ThreadFunctionType fpointer = &StaticNonBlockingAlgorithmThread; m_ThreadID = m_MultiThreader->SpawnThread( fpointer, &m_ThreadParameters); }