]> Creatis software - creaImageIO.git/blobdiff - src2/creaImageIOMultiThreadImageReader.cpp
images size compatible
[creaImageIO.git] / src2 / creaImageIOMultiThreadImageReader.cpp
index 9e4db3ced7ebd1bce3a3c987630dca2ae13adfa9..7dae59112f77e1726d0ead210863a8936f6a403a 100644 (file)
@@ -3,6 +3,7 @@
 #include <wx/utils.h>
 #include <creaImageIOSystem.h>
 
+
 namespace creaImageIO
 {
 
@@ -13,6 +14,7 @@ namespace creaImageIO
     vtkImageData* image)
   {
     wxMutexLocker lock(mMultiThreadImageReaderUserMutex);
+
     this->OnMultiThreadImageReaderEvent(filename,type,image);
   }
   //=====================================================================
@@ -30,12 +32,23 @@ namespace creaImageIO
 
     vtkImageData* Read(const std::string& filename);
     
+       struct deleter
+       {
+               void operator()(ThreadedImageReader* p)
+               {
+                       p->Delete();
+               }
+       };
+       friend struct deleter;
+
 
   private:
     ImageReader mReader;
     MultiThreadImageReader* mMultiThreadImageReader;
        
   };
+
   //=====================================================================
 
   
@@ -52,8 +65,11 @@ namespace creaImageIO
     // Create the threads
     for (int i=0; i<number_of_threads; i++) 
       {
-       ThreadedImageReader* t = new ThreadedImageReader(this);
+                 //ThreadedImageReader* t = new ThreadedImageReader(this);
+                 boost::shared_ptr<ThreadedImageReader> t(new ThreadedImageReader(this), ThreadedImageReader::deleter());
        mThreadedImageReaderList.push_back(t);
+        std::cout << "  ===> Thread "<<i
+                             <<" successfully added"<< std::endl;
       }
     mNumberOfThreadedReadersRunning = 0;
     // Init the queue
@@ -90,8 +106,8 @@ namespace creaImageIO
          }
        else 
          {
-           //      std::cout << "  ===> Thread "<<(*i)->GetCurrentId()
-           //                <<" successfully created"<< std::endl;
+                   std::cout << "  ===> Thread "<<(*i)->GetCurrentId()
+                             <<" successfully created"<< std::endl;
            
          }
       }
@@ -114,13 +130,14 @@ namespace creaImageIO
     for (i =mThreadedImageReaderList.begin();
         i!=mThreadedImageReaderList.end();
         i++)
-      {
+      { std::cout << "  ===> Thread "<<(*i)->GetCurrentId()
+                             <<" successfully stopped"<< std::endl;
                  if((*i)->IsAlive())
                  {
-                       (*i)->Delete();
+                        //(*i)->Delete();
                  }
       }
   mThreadedImageReaderList.clear();
//  mThreadedImageReaderList.clear();
     // Wait a little to be sure that all threads have stopped
     // A better way to do this ?
     //    wxMilliSleep(1000);
@@ -130,7 +147,7 @@ namespace creaImageIO
     do 
       {
        // Sleep a little
-       wxMilliSleep(10);
+               wxMilliSleep(10);
        // Lock
        {
          wxMutexLocker locker(GetMultiThreadImageReaderUserMutex());
@@ -165,6 +182,7 @@ namespace creaImageIO
     //       <<std::endl;
     Stop();
     if (mReader) delete mReader;
+       mThreadedImageReaderList.clear();
   }
   //=====================================================================
 
@@ -279,7 +297,8 @@ namespace creaImageIO
       }
     else if (e==MultiThreadImageReaderUser::ThreadedReaderStopped)
       {
-       mNumberOfThreadedReadersRunning--;
+       
+                mNumberOfThreadedReadersRunning--;
        //      std::cout << "#TR=" << mNumberOfThreadedReadersRunning << std::endl;
       }
   }
@@ -545,8 +564,7 @@ namespace creaImageIO
     // While was not deleted 
     while (!TestDestroy())
       {
-       //      std::cout << "### Thread "<<GetCurrentId()<<" waiting for image"
-       //        << std::endl;
+               //std::cout << "### Thread "<<GetCurrentId()<<" still alive"  << std::endl;
          
        // Lock the mutex
        mMultiThreadImageReader->MultiThreadImageReaderEventLock();