X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FScenery%2FFGTileLoader.hxx;h=5d7d984928c7a9483571ce428d3f5ba4ab1fc450;hb=8dcf08c965ee6386f6fa1a0d8871906fa7faf989;hp=f74ac3d16072e9ffdb9e698ddc8374eaa8b723d5;hpb=b0b6c342492868c465417b0fd71c8752e69a8fe5;p=flightgear.git diff --git a/src/Scenery/FGTileLoader.hxx b/src/Scenery/FGTileLoader.hxx index f74ac3d16..5d7d98492 100644 --- a/src/Scenery/FGTileLoader.hxx +++ b/src/Scenery/FGTileLoader.hxx @@ -24,16 +24,18 @@ #ifndef FG_TILE_LOADER_HXX #define FG_TILE_LOADER_HXX -#include -#include - #include #include #ifdef ENABLE_THREADS # include +# include +#else +# include + SG_USING_STD( queue ); #endif + // Forward reference. class FGTileEntry; @@ -54,27 +56,57 @@ public: */ ~FGTileLoader(); +#if 0 // we don't ever want to do this I don't think + /** + * Flush anything in pending load queue without doing the work + * Leave the free queue intact since that's are only record of + * things we need to remove. + */ + void reinit(); +#endif + /** * Add a tile to the end of the load queue. * @param tile The tile to be loaded from disk. - * @param vis Current visibilty (in feet?) (see FGTileMgr::vis). */ void add( FGTileEntry* tile ); +#ifdef WISH_PLIB_WAS_THREADED // but it isn't + /** + * Remove a tile from memory. + * @param tile The tile to be removed from memory. + */ + void remove( FGTileEntry* tile ); +#endif + + /** + * The tile loader thread will only load one tile per call to the + * update() method. This is a way to spread out the work of the + * tile loader and slow it down so it is less intrusive. For + * systems built without thead support this is a no-op. + */ + void update(); + /** * Returns whether the load queue is empty (contains no elements). * @return true if load queue is empty otherwise returns false. */ - bool empty() const { return tile_queue.empty(); } + // bool empty() const { return tile_load_queue.empty(); } private: private: +#ifdef ENABLE_THREADS /** * FIFO queue of tiles to load from data files. */ - std::queue< FGTileEntry* > tile_queue; + SGBlockingQueue< FGTileEntry * > tile_load_queue; + // SGBlockingQueue< FGTileEntry * > tile_free_queue; +#else + queue< FGTileEntry * > tile_load_queue; + // queue< FGTileEntry * > tile_free_queue; +#endif /** * Base name of directory containing tile data file. @@ -123,7 +155,7 @@ private: * Lock and synchronize access to tile queue. */ SGMutex mutex; - SGCondition cond; + SGPthreadCond frame_cond; /** * Thread cleanup handler.