Classes | Public Member Functions | Private Attributes | Friends

creaImageIO::ThreadedImageReader Class Reference

Collaboration diagram for creaImageIO::ThreadedImageReader:
Collaboration graph
[legend]

List of all members.

Classes

struct  deleter

Public Member Functions

 ThreadedImageReader (MultiThreadImageReader *tir)
void * Entry ()
void OnExit ()
vtkImageData * Read (const std::string &filename)
 ThreadedImageReader (MultiThreadImageReader *tir)
void * Entry ()
void OnExit ()
vtkImageData * Read (const std::string &filename)

Private Attributes

ImageReader mReader
MultiThreadImageReadermMultiThreadImageReader

Friends

struct deleter

Detailed Description

Definition at line 26 of file creaImageIOMultiThreadImageReader.cpp.


Constructor & Destructor Documentation

creaImageIO::ThreadedImageReader::ThreadedImageReader ( MultiThreadImageReader tir  )  [inline]

Definition at line 29 of file creaImageIOMultiThreadImageReader.cpp.

creaImageIO::ThreadedImageReader::ThreadedImageReader ( MultiThreadImageReader tir  )  [inline]

Definition at line 30 of file creaImageIOQMultiThreadImageReader.cpp.


Member Function Documentation

void * creaImageIO::ThreadedImageReader::Entry (  ) 

Definition at line 561 of file creaImageIOMultiThreadImageReader.cpp.

References creaImageIO::MultiThreadImageReader::ImageToLoad::GetFilename(), creaImageIO::MultiThreadImageReader::mImages, mMultiThreadImageReader, creaImageIO::MultiThreadImageReader::mQueue, creaImageIO::MultiThreadImageReaderUser::MultiThreadImageReaderEventLock(), creaImageIO::MultiThreadImageReaderUser::MultiThreadImageReaderEventUnlock(), Read(), creaImageIO::IndexedHeap< T, Comparator, Indexer >::remove_top(), creaImageIO::MultiThreadImageReader::ImageToLoad::SetImage(), creaImageIO::MultiThreadImageReader::SignalImageRead(), creaImageIO::IndexedHeap< T, Comparator, Indexer >::size(), and creaImageIO::MultiThreadImageReaderUser::ThreadedReaderStarted.

  {
    //    std::cout << "### Thread "<<GetCurrentId()<<"::Entry()"
    //                << std::endl;

    mMultiThreadImageReader->MultiThreadImageReaderSendEvent
      ("",
       MultiThreadImageReaderUser::ThreadedReaderStarted,
       0);

    // While was not deleted 
    while (!TestDestroy())
      {
                //std::cout << "### Thread "<<GetCurrentId()<<" still alive"  << std::endl;
          
        // Lock the mutex
        mMultiThreadImageReader->MultiThreadImageReaderEventLock();
        //mMutex.Lock();
        // If image in queue
        if (mMultiThreadImageReader->mQueue.size()>0)
          {
            MultiThreadImageReader::ImageToLoadPtr i = 
              mMultiThreadImageReader->mQueue.remove_top();

            mMultiThreadImageReader->MultiThreadImageReaderEventUnlock();
            //mMutex.Unlock();

            
            //      std::cout << "### Thread "<<GetCurrentId()<<" : reading '"
            //                << i->GetFilename() << "'" << std::endl;
            
            // Do the job
            vtkImageData* im = Read(i->GetFilename());

            // Store it in the map
            mMultiThreadImageReader->MultiThreadImageReaderEventLock();
            //mMutex.Lock();
            MultiThreadImageReader::ImageToLoad itl(0,i->GetFilename());
            MultiThreadImageReader::ImageMapType::iterator it = 
              mMultiThreadImageReader->mImages.find(&itl);
            MultiThreadImageReader::ImageToLoadPtr 
              pitl = const_cast<MultiThreadImageReader::ImageToLoadPtr>
              (it->first);
            pitl->SetImage(im);
            mMultiThreadImageReader->SignalImageRead(pitl,true);//i->GetFilename());
            mMultiThreadImageReader->MultiThreadImageReaderEventUnlock();           //mMutex.Unlock();
            
            //      std::cout << "### Thread "<<GetCurrentId()<<" : reading '"
            //                << i->GetFilename() << "' : DONE" << std::endl;
            
          }
        else 
          {
            mMultiThreadImageReader->MultiThreadImageReaderEventUnlock();
            //mMutex.Unlock();
            // Wait a little to avoid blocking 
            Sleep(10);
          }
      };
    //    std::cout << "### Thread "<<GetCurrentId()<<" stopping"
    //                << std::endl;
       
    return 0;
  }

Here is the call graph for this function:

void* creaImageIO::ThreadedImageReader::Entry (  ) 
void creaImageIO::ThreadedImageReader::OnExit (  ) 
void creaImageIO::ThreadedImageReader::OnExit (  ) 
vtkImageData * creaImageIO::ThreadedImageReader::Read ( const std::string &  filename  ) 

Definition at line 638 of file creaImageIOMultiThreadImageReader.cpp.

References mReader, and creaImageIO::ImageReader::ReadImage().

Referenced by Entry().

  {
    return mReader.ReadImage(filename);
  }

Here is the call graph for this function:

Here is the caller graph for this function:

vtkImageData* creaImageIO::ThreadedImageReader::Read ( const std::string &  filename  ) 

Friends And Related Function Documentation

deleter [friend]

Definition at line 45 of file creaImageIOMultiThreadImageReader.cpp.


Member Data Documentation

Definition at line 50 of file creaImageIOMultiThreadImageReader.cpp.

Referenced by Entry(), and OnExit().

Definition at line 49 of file creaImageIOMultiThreadImageReader.cpp.

Referenced by Read().


The documentation for this class was generated from the following files: