]> Creatis software - creaImageIO.git/blobdiff - src2/creaImageIOMultiThreadImageReader.cpp
set vectors of pointers (with many memory leak) as vectors of shared_ptr
[creaImageIO.git] / src2 / creaImageIOMultiThreadImageReader.cpp
index 7daf7403c9429406558d9fe1955ec48a4ee320c6..7dae59112f77e1726d0ead210863a8936f6a403a 100644 (file)
@@ -3,6 +3,7 @@
 #include <wx/utils.h>
 #include <creaImageIOSystem.h>
 
+
 namespace creaImageIO
 {
 
@@ -31,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;
        
   };
+
   //=====================================================================
 
   
@@ -53,8 +65,8 @@ namespace creaImageIO
     // Create the threads
     for (int i=0; i<number_of_threads; i++) 
       {
-       //ThreadedImageReader* t = new ThreadedImageReader(this);
-       boost::shared_ptr<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;
@@ -122,10 +134,10 @@ namespace creaImageIO
                              <<" 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);