]> git.mxchange.org Git - flightgear.git/blob - Time/event.hxx
No .h for STL includes.
[flightgear.git] / Time / event.hxx
1 // event.hxx -- Flight Gear periodic event scheduler
2 //
3 // Written by Curtis Olson, started December 1997.
4 //
5 // Copyright (C) 1997  Curtis L. Olson  - curt@infoplane.com
6 //
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.
11 //
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.
16 //
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.
20 //
21 // $Id$
22 // (Log is kept at end of this file)
23
24
25 #ifndef _EVENT_HXX
26 #define _EVENT_HXX
27
28
29 #ifndef __cplusplus                                                          
30 # error This library requires C++
31 #endif                                   
32
33
34 #include <deque>        // STL double ended queue
35 #include <list>         // STL list
36
37 #include "fg_time.hxx"
38
39
40 #define FG_EVENT_SUSP 0
41 #define FG_EVENT_READY 1
42 #define FG_EVENT_QUEUED 2
43
44
45 typedef struct {
46     char description[256];
47
48     void (*event)( void );  // pointer to function
49     int status;       // status flag
50
51     long interval;    // interval in ms between each iteration of this event
52
53     fg_timestamp last_run;
54     fg_timestamp current;
55     fg_timestamp next_run;
56
57     long cum_time;    // cumulative processor time of this event
58     long min_time;    // time of quickest execution
59     long max_time;    // time of slowest execution
60     long count;       // number of times executed
61 } fgEVENT;
62
63
64 class fgEVENT_MGR {
65
66     // Event table
67     deque < fgEVENT > event_table;
68
69     // Run Queue
70     list < fgEVENT * > run_queue;
71
72 public:
73
74     // Constructor
75     fgEVENT_MGR ( void );
76
77     // Initialize the scheduling subsystem
78     void Init( void );
79
80     // Register an event with the scheduler
81     void Register(char *desc, void (*event)( void ), int status, 
82                          int interval);
83
84     // Update the scheduling parameters for an event
85     void Update( void );
86
87     // Delete a scheduled event
88     void Delete( void );
89
90     // Temporarily suspend scheduling of an event
91     void Suspend( void );
92
93     // Resume scheduling and event
94     void Resume( void );
95
96     // Dump scheduling stats
97     void PrintStats( void );
98
99     // Add pending jobs to the run queue and run the job at the front
100     // of the queue
101     void Process( void );
102
103     // Destructor
104     ~fgEVENT_MGR ( void );
105 };
106
107
108 // Wrapper to dump scheduling stats
109 void fgEventPrintStats( void );
110
111 extern fgEVENT_MGR global_events;
112
113
114 #endif // _EVENT_HXX
115
116
117 // $Log$
118 // Revision 1.3  1998/06/03 00:48:12  curt
119 // No .h for STL includes.
120 //
121 // Revision 1.2  1998/05/22 21:14:54  curt
122 // Rewrote event.cxx in C++ as a class using STL for the internal event list
123 // and run queue this removes the arbitrary list sizes and makes things much
124 // more dynamic.  Because this is C++-classified we can now have multiple
125 // event_tables if we'd ever want them.
126 //
127 // Revision 1.1  1998/04/24 00:52:26  curt
128 // Wrapped "#include <config.h>" in "#ifdef HAVE_CONFIG_H"
129 // Fog color fixes.
130 // Separated out lighting calcs into their own file.
131 //
132 // Revision 1.4  1998/04/21 17:01:43  curt
133 // Fixed a problems where a pointer to a function was being passed around.  In
134 // one place this functions arguments were defined as ( void ) while in another
135 // place they were defined as ( int ).  The correct answer was ( int ).
136 //
137 // Prepairing for C++ integration.
138 //
139 // Revision 1.3  1998/01/22 02:59:43  curt
140 // Changed #ifdef FILE_H to #ifdef _FILE_H
141 //
142 // Revision 1.2  1998/01/19 18:40:39  curt
143 // Tons of little changes to clean up the code and to remove fatal errors
144 // when building with the c++ compiler.
145 //
146 // Revision 1.1  1997/12/30 04:19:22  curt
147 // Initial revision.
148