4 * This file is part of LyX, the document processor.
5 * Licence details can be found in the file COPYING.
7 * \author Alfredo Braunstein
9 * Full author contact details are available in file CREDITS.
11 * This implements a threaded service queue which loads images on background.
12 * In order to request an image loading you call touch() with the pointer to
13 * the cached image. Then it will try to satisfy the request as soon as
14 * posible (that's it: after finishing an eventual loading on progress)
15 * touch() returns inmediately, in order not tu disrupt the flow of the main
17 * The service thread is the method loadNext(). It's actually not a thread,
18 * but implemented with a timer that comes back every x msec.
24 #include "GraphicsCache.h"
25 #include "GraphicsCacheItem.h"
27 #include "frontends/Timeout.h"
37 /// Use this to request that the item is loaded.
38 void touch(Cache::ItemPtr const & item);
39 /// Query whether the clock is ticking.
41 ///get the and only instance of the class
42 static LoaderQueue & get();
43 /** Adjusts the queue priority:
44 * numimages is the number of images loaded in a particular call
46 * millisecs is the time interval between calls.
47 * Higher numimages, lower millisecs means higher priority.
49 static void setPriority(int numimages , int millisecs);
51 /// This class is a singleton class... use LoaderQueue::get() instead
53 /// The in-progress loading queue (elements are unique here).
54 std::list<Cache::ItemPtr> cache_queue_;
55 /// Used to make the insertion of new elements faster.
56 std::set<Cache::ItemPtr> cache_set_;
57 /// Newly touched elements go here. loadNext moves them to cache_queue_
58 std::queue<Cache::ItemPtr> bucket_;
64 static int s_numimages_ ;
66 static int s_millisecs_ ;
68 /** This is the 'threaded' method, that does the loading in the
78 } // namespace graphics
81 #endif // LOADERQUEUE_H