]> Creatis software - creaImageIO.git/blobdiff - src2/creaImageIOMultiThreadImageReader.cpp
_T
[creaImageIO.git] / src2 / creaImageIOMultiThreadImageReader.cpp
index 3f4ba3ab6413f38c722ab51e41fe848cad3141e3..9645f09f163337bb7a217dc95e08de406cf57c40 100644 (file)
@@ -31,12 +31,22 @@ namespace creaImageIO
 
     vtkImageData* Read(const std::string& filename);
     
+       struct deleter
+       {
+               void operator()(ThreadedImageReader* p)
+               {
+                       p->Delete();
+               }
+       };
+       friend struct deleter;
+
 
   private:
     ImageReader mReader;
     MultiThreadImageReader* mMultiThreadImageReader;
        
   };
+
   //=====================================================================
 
   
@@ -53,10 +63,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;
+                     <<" successfully added"<< std::endl;
       }
     mNumberOfThreadedReadersRunning = 0;
     // Init the queue
@@ -121,10 +132,11 @@ namespace creaImageIO
                              <<" successfully stopped"<< std::endl;
                  if((*i)->IsAlive())
                  {
-                       (*i)->Delete();
+                         (*i).reset();
+                        //(*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);
@@ -169,6 +181,7 @@ namespace creaImageIO
     //       <<std::endl;
     Stop();
     if (mReader) delete mReader;
+       mThreadedImageReaderList.clear();
   }
   //=====================================================================
 
@@ -198,7 +211,7 @@ namespace creaImageIO
                                        int priority )
   {
        wxMutexLocker lock(GetMultiThreadImageReaderUserMutex()); //mMutex);
-    
+
          if (mNumberOfThreadedReadersRunning==0)
 //    if (mThreadedImageReaderList.size()==0) 
       {
@@ -227,7 +240,6 @@ namespace creaImageIO
        return;
       }
 
-
     ImageToLoad itl(user,filename);
     ImageMapType::iterator i = mImages.find(&itl);
     if (i!=mImages.end())
@@ -468,7 +480,6 @@ namespace creaImageIO
 
        GimmickMessage(5," ==> Total mem = "<<mTotalMem<<" Ko "<<std::endl);
 
-
        if (user!=0) 
          {
            //      std::cout << "unlock..."<<std::endl;
@@ -479,7 +490,6 @@ namespace creaImageIO
               MultiThreadImageReaderUser::ImageUnloaded,
               0);
            //      std::cout << "event ok"<<std::endl;
-
          }     
 
        if (unload->Index()>=0)
@@ -499,8 +509,6 @@ namespace creaImageIO
        //          std::cout << "delete ok."<<std::endl;
 
       }
-    
-  
   }
   //=====================================================================