1 // event.hxx -- Flight Gear periodic event scheduler
3 // Written by Curtis Olson, started December 1997.
5 // Copyright (C) 1997 Curtis L. Olson - curt@infoplane.com
7 // This program is free software; you can redistribute it and/or
8 // modify it under the terms of the GNU General Public License as
9 // published by the Free Software Foundation; either version 2 of the
10 // License, or (at your option) any later version.
12 // This program is distributed in the hope that it will be useful, but
13 // WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 // General Public License for more details.
17 // You should have received a copy of the GNU General Public License
18 // along with this program; if not, write to the Free Software
19 // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 // (Log is kept at end of this file)
30 # error This library requires C++
34 #if defined ( __sun__ )
35 extern "C" void *memmove(void *, const void *, size_t);
36 extern "C" void *memset(void *, int, size_t);
40 #include <deque> // STL double ended queue
41 #include <list> // STL list
43 #ifdef NEEDNAMESPACESTD
47 #include "fg_time.hxx"
50 #define FG_EVENT_SUSP 0
51 #define FG_EVENT_READY 1
52 #define FG_EVENT_QUEUED 2
56 char description[256];
58 void (*event)( void ); // pointer to function
59 int status; // status flag
61 long interval; // interval in ms between each iteration of this event
63 fg_timestamp last_run;
65 fg_timestamp next_run;
67 long cum_time; // cumulative processor time of this event
68 long min_time; // time of quickest execution
69 long max_time; // time of slowest execution
70 long count; // number of times executed
77 deque < fgEVENT > event_table;
80 list < fgEVENT * > run_queue;
87 // Initialize the scheduling subsystem
90 // Register an event with the scheduler
91 void Register(char *desc, void (*event)( void ), int status,
94 // Update the scheduling parameters for an event
97 // Delete a scheduled event
100 // Temporarily suspend scheduling of an event
101 void Suspend( void );
103 // Resume scheduling and event
106 // Dump scheduling stats
107 void PrintStats( void );
109 // Add pending jobs to the run queue and run the job at the front
111 void Process( void );
114 ~fgEVENT_MGR ( void );
118 // Wrapper to dump scheduling stats
119 void fgEventPrintStats( void );
121 extern fgEVENT_MGR global_events;
128 // Revision 1.6 1998/07/24 21:42:25 curt
129 // Output message tweaks.
131 // Revision 1.5 1998/07/13 21:02:07 curt
132 // Wrote access functions for current fgOPTIONS.
134 // Revision 1.4 1998/06/12 00:59:52 curt
135 // Build only static libraries.
136 // Declare memmove/memset for Sloaris.
137 // Rewrote fg_time.c routine to get LST start seconds to better handle
138 // Solaris, and be easier to port, and understand the GMT vs. local
141 // Revision 1.3 1998/06/03 00:48:12 curt
142 // No .h for STL includes.
144 // Revision 1.2 1998/05/22 21:14:54 curt
145 // Rewrote event.cxx in C++ as a class using STL for the internal event list
146 // and run queue this removes the arbitrary list sizes and makes things much
147 // more dynamic. Because this is C++-classified we can now have multiple
148 // event_tables if we'd ever want them.
150 // Revision 1.1 1998/04/24 00:52:26 curt
151 // Wrapped "#include <config.h>" in "#ifdef HAVE_CONFIG_H"
153 // Separated out lighting calcs into their own file.
155 // Revision 1.4 1998/04/21 17:01:43 curt
156 // Fixed a problems where a pointer to a function was being passed around. In
157 // one place this functions arguments were defined as ( void ) while in another
158 // place they were defined as ( int ). The correct answer was ( int ).
160 // Prepairing for C++ integration.
162 // Revision 1.3 1998/01/22 02:59:43 curt
163 // Changed #ifdef FILE_H to #ifdef _FILE_H
165 // Revision 1.2 1998/01/19 18:40:39 curt
166 // Tons of little changes to clean up the code and to remove fatal errors
167 // when building with the c++ compiler.
169 // Revision 1.1 1997/12/30 04:19:22 curt