X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src2%2FcreaImageIOMultiThreadImageReader.cpp;h=9e4db3ced7ebd1bce3a3c987630dca2ae13adfa9;hb=46fb4b43011a4043c7b5ef2e7bd57e1695cd6b7f;hp=fd76051ab7fbf4704e7baee893d3e9ae5fe26cc7;hpb=cbf693fa62cd51f4ca5c881838bbb609edc447b0;p=creaImageIO.git diff --git a/src2/creaImageIOMultiThreadImageReader.cpp b/src2/creaImageIOMultiThreadImageReader.cpp index fd76051..9e4db3c 100644 --- a/src2/creaImageIOMultiThreadImageReader.cpp +++ b/src2/creaImageIOMultiThreadImageReader.cpp @@ -1,6 +1,7 @@ #include #include #include +#include namespace creaImageIO { @@ -33,6 +34,7 @@ namespace creaImageIO private: ImageReader mReader; MultiThreadImageReader* mMultiThreadImageReader; + }; //===================================================================== @@ -42,7 +44,7 @@ namespace creaImageIO : //mDoNotSignal(false), mReader(0), mTotalMem(0), - mTotalMemMax(10000) + mTotalMemMax(1000000) { // std::cout << "#### MultiThreadImageReader::MultiThreadImageReader(" // << " #threads= " << number_of_threads <<" )"< 0) return true; + ThreadedImageReaderListType::iterator i; for (i =mThreadedImageReaderList.begin(); i!=mThreadedImageReaderList.end(); @@ -111,7 +115,10 @@ namespace creaImageIO i!=mThreadedImageReaderList.end(); i++) { - (*i)->Delete(); + if((*i)->IsAlive()) + { + (*i)->Delete(); + } } mThreadedImageReaderList.clear(); // Wait a little to be sure that all threads have stopped @@ -186,9 +193,10 @@ namespace creaImageIO const std::string& filename, int priority ) { - wxMutexLocker lock(GetMultiThreadImageReaderUserMutex()); //mMutex); + wxMutexLocker lock(GetMultiThreadImageReaderUserMutex()); //mMutex); - if (mThreadedImageReaderList.size()==0) + if (mNumberOfThreadedReadersRunning==0) +// if (mThreadedImageReaderList.size()==0) { // no detached reader : use self reader ImageToLoad itl(user,filename); @@ -280,15 +288,21 @@ namespace creaImageIO //===================================================================== vtkImageData* MultiThreadImageReader::GetImage(const std::string& filename) { - - // std::cout << "** MultiThreadImageReader::GetImage('"<GetImage(); } - + + /* mRequestedFilename = filename; mRequestedImage = 0; ImageToLoad itl(this,filename); @@ -350,11 +365,13 @@ namespace creaImageIO mImages[pitl] = 0; mQueue.insert(pitl); } + */ } while (0); // std::cout << "Waiting..."<GetFilename()<<"' read"<GetImage()->PropagateUpdateExtent(); long ImMem = p->GetImage()->GetEstimatedMemorySize(); mTotalMem += ImMem; - // std::cout << " ==> Total mem = "< Image in memory = "< Total mem = "< mTotalMemMax) { - // std::cout - // <<" ! Exceeded max of " - // << mTotalMemMax << " : unloading oldest image ... " - // << std::endl; + GimmickMessage(5, + " ! Exceeded max of " + << mTotalMemMax << " Ko : unloading oldest image ... " + << std::endl); if ( mUnloadQueue.size() <= 1 ) { - // std::cout << "Only one image : cannot load AND unload it !!" - // <GetUser(); + /* if ((user!=0)&&(user!=this)) { user->GetMultiThreadImageReaderUserMutex().Lock(); } + */ + std::string filename = unload->GetFilename(); - // std::cout << "'" << unload->GetFilename() << "'" << std::endl; + GimmickMessage(5,"'" << filename << "'" << std::endl); mTotalMem -= unload->GetImage()->GetEstimatedMemorySize(); - // std::cout << " ==> Total mem = "<GetFilename(); + GimmickMessage(5," ==> Total mem = "<GetMultiThreadImageReaderUserMutex().Unlock(); + // std::cout << "event"<MultiThreadImageReaderSendEvent + (filename, + MultiThreadImageReaderUser::ImageUnloaded, + 0); + // std::cout << "event ok"<Index()>=0) { - // std::cout << "still in queue"<Index() = -1; @@ -452,18 +493,6 @@ namespace creaImageIO delete unload; // std::cout << "delete ok."<GetMultiThreadImageReaderUserMutex().Unlock(); - // std::cout << "event"<MultiThreadImageReaderSendEvent - (filename, - MultiThreadImageReaderUser::ImageUnloaded, - 0); - // std::cout << "event ok"<