X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src2%2FcreaImageIOMultiThreadImageReader.cpp;h=3f4ba3ab6413f38c722ab51e41fe848cad3141e3;hb=76f7c62a930e60f9a569ede29b9546a179875d2c;hp=717b09cb89699f7adf87afb3f5be9f79e1719d72;hpb=240788466e20053bb81dcb0cbafdfd4436acc359;p=creaImageIO.git diff --git a/src2/creaImageIOMultiThreadImageReader.cpp b/src2/creaImageIOMultiThreadImageReader.cpp index 717b09c..3f4ba3a 100644 --- a/src2/creaImageIOMultiThreadImageReader.cpp +++ b/src2/creaImageIOMultiThreadImageReader.cpp @@ -13,6 +13,7 @@ namespace creaImageIO vtkImageData* image) { wxMutexLocker lock(mMultiThreadImageReaderUserMutex); + this->OnMultiThreadImageReaderEvent(filename,type,image); } //===================================================================== @@ -34,6 +35,7 @@ namespace creaImageIO private: ImageReader mReader; MultiThreadImageReader* mMultiThreadImageReader; + }; //===================================================================== @@ -43,7 +45,7 @@ namespace creaImageIO : //mDoNotSignal(false), mReader(0), mTotalMem(0), - mTotalMemMax(100000) + mTotalMemMax(1000000) { // std::cout << "#### MultiThreadImageReader::MultiThreadImageReader(" // << " #threads= " << number_of_threads <<" )"< Thread "< 0) return true; + ThreadedImageReaderListType::iterator i; for (i =mThreadedImageReaderList.begin(); i!=mThreadedImageReaderList.end(); @@ -87,8 +93,8 @@ namespace creaImageIO } else { - // std::cout << " ===> Thread "<<(*i)->GetCurrentId() - // <<" successfully created"<< std::endl; + std::cout << " ===> Thread "<<(*i)->GetCurrentId() + <<" successfully created"<< std::endl; } } @@ -111,8 +117,12 @@ namespace creaImageIO for (i =mThreadedImageReaderList.begin(); i!=mThreadedImageReaderList.end(); i++) - { - (*i)->Delete(); + { std::cout << " ===> Thread "<<(*i)->GetCurrentId() + <<" successfully stopped"<< std::endl; + if((*i)->IsAlive()) + { + (*i)->Delete(); + } } mThreadedImageReaderList.clear(); // Wait a little to be sure that all threads have stopped @@ -124,7 +134,7 @@ namespace creaImageIO do { // Sleep a little - wxMilliSleep(10); + wxMilliSleep(10); // Lock { wxMutexLocker locker(GetMultiThreadImageReaderUserMutex()); @@ -187,9 +197,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); @@ -272,7 +283,8 @@ namespace creaImageIO } else if (e==MultiThreadImageReaderUser::ThreadedReaderStopped) { - mNumberOfThreadedReadersRunning--; + + mNumberOfThreadedReadersRunning--; // std::cout << "#TR=" << mNumberOfThreadedReadersRunning << std::endl; } } @@ -281,15 +293,21 @@ namespace creaImageIO //===================================================================== vtkImageData* MultiThreadImageReader::GetImage(const std::string& filename) { - - // std::cout << "** MultiThreadImageReader::GetImage('"<GetImage(); } - + + /* mRequestedFilename = filename; mRequestedImage = 0; ImageToLoad itl(this,filename); @@ -351,11 +370,13 @@ namespace creaImageIO mImages[pitl] = 0; mQueue.insert(pitl); } + */ } while (0); // std::cout << "Waiting..."<GetUser(); + /* if ((user!=0)&&(user!=this)) { user->GetMultiThreadImageReaderUserMutex().Lock(); } + */ + std::string filename = unload->GetFilename(); - GimmickMessage(5,"'" << unload->GetFilename() << "'" << std::endl); + GimmickMessage(5,"'" << filename << "'" << std::endl); mTotalMem -= unload->GetImage()->GetEstimatedMemorySize(); GimmickMessage(5," ==> Total mem = "<GetFilename(); + + if (user!=0) + { + // std::cout << "unlock..."<GetMultiThreadImageReaderUserMutex().Unlock(); + // std::cout << "event"<MultiThreadImageReaderSendEvent + (filename, + MultiThreadImageReaderUser::ImageUnloaded, + 0); + // std::cout << "event ok"<Index()>=0) { // GimmickMessage(5,"still in queue"<GetMultiThreadImageReaderUserMutex().Unlock(); - // std::cout << "event"<MultiThreadImageReaderSendEvent - (filename, - MultiThreadImageReaderUser::ImageUnloaded, - 0); - // std::cout << "event ok"<MultiThreadImageReaderEventLock();