//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
-// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
//
// $Id$
#include <simgear/structure/subsystem_mgr.hxx>
#include <simgear/environment/metar.hxx>
-#if defined(ENABLE_THREADS) && ENABLE_THREADS
+#if defined(ENABLE_THREADS)
# include <simgear/threads/SGThread.hxx>
# include <simgear/threads/SGQueue.hxx>
#endif
virtual void setEnvironment (FGEnvironment * environment);
- virtual FGEnvironment * getEnvironment () const { return _environment; }
+ virtual const FGEnvironment * getEnvironment () const { return _environment; }
virtual void setLongitudeDeg (double lon_deg);
virtual void setLatitudeDeg (double lat_deg);
float same_station_interval_sec;
float search_elapsed;
float fetch_elapsed;
- FGAirport last_apt;
+ const FGAirport *last_apt;
SGPropertyNode *proxy_host;
SGPropertyNode *proxy_port;
SGPropertyNode *proxy_auth;
+ SGPropertyNode *metar_max_age;
FGMetarResult fetch_data( const string &icao );
- virtual void update_metar_properties( FGMetar *m );
+ virtual void update_metar_properties( const FGMetar *m );
void update_env_config();
private:
-#if defined(ENABLE_THREADS) && ENABLE_THREADS
+#if defined(ENABLE_THREADS)
/**
* FIFO queue which holds a pointer to the fetched metar data.
*/
/**
* FIFO queue which holds a pointer to the fetched metar data.
*/
- SGBlockingQueue < FGMetarResult > result_queue;
+ SGLockedQueue < FGMetarResult > result_queue;
#else
/**
* FIFO queue which holds a pointer to the fetched metar data.
queue < FGMetarResult > result_queue;
#endif
-#if defined(ENABLE_THREADS) && ENABLE_THREADS
+#if defined(ENABLE_THREADS)
/**
* This class represents the thread of execution responsible for
* fetching the metar data.
*/
MetarThread* thread;
- /**
- * Lock and synchronize access to metar queue.
- */
- SGMutex mutex;
- SGPthreadCond metar_cond;
-
- /**
- * Thread cleanup handler.
- */
- friend void metar_cleanup_handler( void* );
-
+ void thread_stop();
#endif // ENABLE_THREADS
int _error_count;
+ int _stale_count;
double _dt;
double _error_dt;
};