X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src2%2FcreaImageIOMultiThreadImageReader.cpp;h=3ee50de9a2e558912cfe0d8ac0e489e2cc1cd209;hb=cb539b100d38f3092d06430575f846c916235db4;hp=8ec273fec3d4350d427d7e07c129964b8a53a052;hpb=f4171ab3f5bff76f21258d8b2cb7a7da5c94a591;p=creaImageIO.git diff --git a/src2/creaImageIOMultiThreadImageReader.cpp b/src2/creaImageIOMultiThreadImageReader.cpp index 8ec273f..3ee50de 100644 --- a/src2/creaImageIOMultiThreadImageReader.cpp +++ b/src2/creaImageIOMultiThreadImageReader.cpp @@ -3,6 +3,10 @@ #include #include +#include +#ifdef _DEBUG +#define new DEBUG_NEW +#endif namespace creaImageIO { @@ -13,6 +17,7 @@ namespace creaImageIO vtkImageData* image) { wxMutexLocker lock(mMultiThreadImageReaderUserMutex); + this->OnMultiThreadImageReaderEvent(filename,type,image); } //===================================================================== @@ -30,11 +35,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; + }; + //===================================================================== @@ -43,16 +59,20 @@ namespace creaImageIO : //mDoNotSignal(false), mReader(0), mTotalMem(0), - mTotalMemMax(100000) + mTotalMemMax(1000000) { // std::cout << "#### MultiThreadImageReader::MultiThreadImageReader(" // << " #threads= " << number_of_threads <<" )"< 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; } } @@ -108,15 +128,21 @@ namespace creaImageIO // std::cout << "#### MultiThreadImageReader::Stop()" // <Delete(); + { std::cout << " ===> Thread "<<(*i)->GetCurrentId() + <<" successfully stopped"<< std::endl; + if((*i)->IsAlive()) + {(*i)->Pause(); + (*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); @@ -126,7 +152,7 @@ namespace creaImageIO do { // Sleep a little - wxMilliSleep(10); + wxMilliSleep(10); // Lock { wxMutexLocker locker(GetMultiThreadImageReaderUserMutex()); @@ -151,6 +177,7 @@ namespace creaImageIO delete j->first; } mImages.clear(); + mDone = true; } //===================================================================== @@ -161,6 +188,7 @@ namespace creaImageIO // <GetImage(); } - + + /* mRequestedFilename = filename; mRequestedImage = 0; ImageToLoad itl(this,filename); @@ -355,11 +389,13 @@ namespace creaImageIO mImages[pitl] = 0; mQueue.insert(pitl); } + */ } while (0); // std::cout << "Waiting..."< Total mem = "<Index()>=0) @@ -482,8 +516,6 @@ namespace creaImageIO // std::cout << "delete ok."<MultiThreadImageReaderEventLock();