X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src2%2FcreaImageIOMultiThreadImageReader.cpp;h=5871d8044774da930d67e3d9d033d8cb75bdd175;hb=b0843014c5482f70050fab8036c6780172e3b6c9;hp=9e4db3ced7ebd1bce3a3c987630dca2ae13adfa9;hpb=ab4f051eca01a4340f78587f97e89eeb46a8d8a7;p=creaImageIO.git diff --git a/src2/creaImageIOMultiThreadImageReader.cpp b/src2/creaImageIOMultiThreadImageReader.cpp index 9e4db3c..5871d80 100644 --- a/src2/creaImageIOMultiThreadImageReader.cpp +++ b/src2/creaImageIOMultiThreadImageReader.cpp @@ -3,6 +3,7 @@ #include #include + namespace creaImageIO { @@ -13,6 +14,7 @@ namespace creaImageIO vtkImageData* image) { wxMutexLocker lock(mMultiThreadImageReaderUserMutex); + this->OnMultiThreadImageReaderEvent(filename,type,image); } //===================================================================== @@ -30,12 +32,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; }; + //===================================================================== @@ -52,8 +64,11 @@ namespace creaImageIO // Create the threads for (int i=0; i t(new ThreadedImageReader(this), ThreadedImageReader::deleter()); mThreadedImageReaderList.push_back(t); + std::cout << " ===> Thread "< Thread "<<(*i)->GetCurrentId() - // <<" successfully created"<< std::endl; + std::cout << " ===> Thread "<<(*i)->GetCurrentId() + <<" successfully created"<< std::endl; } } @@ -114,13 +129,15 @@ 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).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); @@ -130,7 +147,7 @@ namespace creaImageIO do { // Sleep a little - wxMilliSleep(10); + wxMilliSleep(10); // Lock { wxMutexLocker locker(GetMultiThreadImageReaderUserMutex()); @@ -165,6 +182,7 @@ namespace creaImageIO // < Total mem = "<Index()>=0) @@ -494,8 +510,6 @@ namespace creaImageIO // std::cout << "delete ok."<MultiThreadImageReaderEventLock();