]> Creatis software - creaImageIO.git/blobdiff - src/creaImageIOMultiThreadImageReader.cpp
#3218 creaImageIO Feature New Normal - vtk8itk4wx3-mingw64
[creaImageIO.git] / src / creaImageIOMultiThreadImageReader.cpp
index 7aa60acedeb72adf688478a6af7494b0edbf46e5..e7b023bba7e2ddc75e78d998e4f045036ca6c409 100644 (file)
@@ -31,6 +31,9 @@
 #include <wx/utils.h>
 #include <creaImageIOSystem.h>
 
+       #include <creaImageIODicomImageReader.h>
+
+
 #include <creaImageIOGimmick.h>
 #ifdef _DEBUG
 #define new DEBUG_NEW
@@ -49,8 +52,22 @@ namespace creaImageIO
   }
   //=====================================================================
 
+  class wxThreadEED2
+  { 
+  public:
+         void Delete() {  printf("EED wxThreadEED2::Delete() \n"); }
+         int Run() { printf("EED wxThreadEED2::Run() \n"); return 0;}
+         void Pause() { printf("EED wxThreadEED2::Pause() \n"); }
+         void Create() { printf("EED wxThreadEED2::Create() \n"); }
+         bool IsAlive() { printf("EED wxThreadEED2::IsAlive() \n"); return false; }
+         bool TestDestroy() { printf("EED wxThreadEED2::TestDestroy() \n"); return false; }
+         int GetCurrentId() { printf("EED wxThreadEED2::GetCurrentId() \n"); return -999; }      
+  };
+  
   //=====================================================================
-  class ThreadedImageReader: public wxThread
+//EED 2018-08-20
+//  class ThreadedImageReader: public wxThread
+  class ThreadedImageReader: public wxThreadEED2
   {
   public:
     ThreadedImageReader(MultiThreadImageReader* tir) :
@@ -79,7 +96,7 @@ namespace creaImageIO
   //=====================================================================
   MultiThreadImageReader::MultiThreadImageReader(int number_of_threads)
     : //mDoNotSignal(false),
-      mReader(0),
+      mReader(NULL),
       mTotalMem(0),
       mTotalMemMax(1000000)
   {
@@ -89,16 +106,13 @@ namespace creaImageIO
          mDone = false;
     // Create the threads
        
-printf("EED MultiThreadImageReader::MultiThreadImageReader %d \n", number_of_threads); 
-
     for (int i=0; i<number_of_threads; i++) 
-      {
-                 //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;
-      }
+    {
+               //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;
+      } // for
     mNumberOfThreadedReadersRunning = 0;
     // Init the queue
     mQueue.set(mComparator);
@@ -116,7 +130,6 @@ printf("EED MultiThreadImageReader::MultiThreadImageReader %d \n", number_of_thr
   //=====================================================================
   bool MultiThreadImageReader::Start()
   {
-printf("EED MultiThreadImageReader::Start  Start\n");
     //    std::cout << "#### MultiThreadImageReader::Start()"
     //               <<std::endl;
          if (mNumberOfThreadedReadersRunning > 0) return true;
@@ -139,7 +152,6 @@ printf("EED MultiThreadImageReader::Start  Start\n");
                wxMutexLocker locker(GetMultiThreadImageReaderUserMutex());
                //    std::cout << "EO Start : #Threads running = "
                //                    << mNumberOfThreadedReadersRunning<<std::endl;
-printf("EED MultiThreadImageReader::Start  Start\n");
     return true;
   }
   //=====================================================================
@@ -147,7 +159,6 @@ printf("EED MultiThreadImageReader::Start  Start\n");
   //=====================================================================
   void MultiThreadImageReader::Stop()
   { 
-printf("EED MultiThreadImageReader::Stop  Start\n");
 //                 std::cout << "#### MultiThreadImageReader::Stop()"
 //           <<std::endl;
   //  std::cout << "Sending stop order to the threads..."<<std::endl;
@@ -194,27 +205,44 @@ printf("EED MultiThreadImageReader::Stop  Start\n");
     while (true);
 //        std::cout << "All threads stopped : OK "<<std::endl;
 
-    ImageMapType::iterator j;
-    for (j =mImages.begin(); j!=mImages.end(); ++j)
-       {
-               delete j->first;
-    } //for 
-    mImages.clear();
+
+       CleanMImagesMap();
+       
        mDone = true;
-printf("EED MultiThreadImageReader::Stop  End\n");
+
   }
   //=====================================================================
 
+  
+   void MultiThreadImageReader::CleanMImagesMap()
+  {
+     ImageMapType::iterator j;
+     for (j=mImages.begin(); j!=mImages.end(); ++j)
+        {
+               delete j->first;
+     } //for 
+     mImages.clear();
+  }
+  
   //=====================================================================
   MultiThreadImageReader::~MultiThreadImageReader()
   {
-printf("EED MultiThreadImageReader::~MultiThreadImageReader  Start\n");
     //    std::cout << "#### MultiThreadImageReader::~MultiThreadImageReader()"
     //       <<std::endl;
     Stop();
     if (mReader) delete mReader;
        mThreadedImageReaderList.clear();
-printf("EED MultiThreadImageReader::~MultiThreadImageReader  End\n");
+
+       CleanMImagesMap();
+       
+/*     
+       ImageMapType::iterator it;
+       for (it=mImages.begin() ; it!=mImages.end(); it++)
+       {
+                       printf("MultiThreadImageReader::~MultiThreadImageReader  %s ", it.first->GetFilename() );
+       } // for it
+*/
+       
   }
   //=====================================================================
 
@@ -359,29 +387,28 @@ printf("EED MultiThreadImageReader::~MultiThreadImageReader  End\n");
        //                if (mNumberOfThreadedReadersRunning==0)
        //      if (mThreadedImageReaderList.size()==0)
        if (true)
-         {
+       {
            ImageToLoad itl(this,filename);
            ImageMapType::iterator i = mImages.find(&itl);
            if (i!=mImages.end())
-             {
-               ImageToLoadPtr pitl = const_cast<ImageToLoadPtr>(i->first);
-               // Already inserted
-               if (pitl->GetImage() != 0)
-                 {
-                   // Already read
-                   UpdateUnloadPriority(pitl,
-                                        GetMaximalPriorityWithoutLocking()+1);
-                   return pitl->GetImage();
-                 }
-             }
+           {
+                       ImageToLoadPtr pitl = const_cast<ImageToLoadPtr>(i->first);
+                       // Already inserted
+                       if (pitl->GetImage() != NULL)
+                       {
+                               // Already read
+                               UpdateUnloadPriority( pitl, GetMaximalPriorityWithoutLocking()+1 );
+                               return pitl->GetImage();
+                       } // if pitl->GetImage()
+           } // if i
+               
            ImageToLoadPtr pitl = new ImageToLoad(this,filename,0);
-           mImages[pitl] = 0;
-           pitl->SetImage(mReader->ReadImage(filename));
-           UpdateUnloadPriority(pitl,
-                                GetMaximalPriorityWithoutLocking()+1);
+           mImages[pitl]               = NULL;
+           pitl->SetImage( mReader->ReadImage(filename) );
+           UpdateUnloadPriority( pitl, GetMaximalPriorityWithoutLocking()+1 );
            return pitl->GetImage();
-         }
-
+       } // if true
+       
        /*      
        mRequestedFilename = filename;
        mRequestedImage = 0;
@@ -448,6 +475,8 @@ printf("EED MultiThreadImageReader::~MultiThreadImageReader  End\n");
     while (true);
     // 
     */
+       printf("EED MultiThreadImageReader::GetImage  END\n");  
+       
   }
   //=====================================================================