diff --git a/rtgui/filecatalog.cc b/rtgui/filecatalog.cc index b25e6739a..e2b534159 100644 --- a/rtgui/filecatalog.cc +++ b/rtgui/filecatalog.cc @@ -27,6 +27,10 @@ #include #include +#ifdef _OPENMP +#include +#endif + #define CHECKTIME 2000 extern Glib::ustring argv0; @@ -970,25 +974,50 @@ bool FileCatalog::handleShortcutKey (GdkEventKey* event) { return false; } -void PreviewMultiLoader::setPreviewLoaderListener (PreviewLoaderListener* p) { - loadA.setPreviewLoaderListener(p); loadB.setPreviewLoaderListener(p); +PreviewMultiLoader::PreviewMultiLoader () { + next=0; + loaderCount=1; + + #ifdef _OPENMP + loaderCount=omp_get_num_procs(); + // If there are pleny of processor, spare one for snappy image editing + if (loaderCount>3) loaderCount--; + #endif + + loaders=new PreviewLoader[loaderCount]; +} + +void PreviewMultiLoader::setPreviewLoaderListener (PreviewLoaderListener* p) { + for (int i=0;i=loaderCount) next=0; } -void PreviewMultiLoader::start () { loadA.start(); loadB.start(); } -void PreviewMultiLoader::process () { loadA.process (); loadB.process(); } -void PreviewMultiLoader::remove (Glib::ustring fname) { loadA.remove(fname); loadB.remove(fname); } -void PreviewMultiLoader::end () { loadA.end(); loadB.end(); } -bool PreviewMultiLoader::runs () { return loadA.runs() || loadB.runs(); } -void PreviewMultiLoader::terminate () { loadA.terminate(); loadB.terminate(); } -void PreviewMultiLoader::stop () { loadA.stop(); loadB.stop(); } +void PreviewMultiLoader::start () { + for (int i=0;i { // Same interface as a normal PreviewLoader to minimize effects on code class PreviewMultiLoader { protected: - PreviewLoader loadA,loadB; - int next; + PreviewLoader *loaders; + int next,loaderCount; public: - PreviewMultiLoader () { next=0; } + PreviewMultiLoader (); void setPreviewLoaderListener (PreviewLoaderListener* p);