Open Inventor Reference
SoSensorManager.h
Go to the documentation of this file.
1/*
2 *
3 * Copyright (C) 2000 Silicon Graphics, Inc. All Rights Reserved.
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * Further, this software is distributed without any warranty that it is
16 * free of the rightful claim of any third person regarding infringement
17 * or the like. Any license provided herein, whether implied or
18 * otherwise, applies only to this software file. Patent licenses, if
19 * any, provided herein do not apply to combinations of this program with
20 * other software, or any other product whatsoever.
21 *
22 * You should have received a copy of the GNU Lesser General Public
23 * License along with this library; if not, write to the Free Software
24 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25 *
26 * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
27 * Mountain View, CA 94043, or:
28 *
29 * http://www.sgi.com
30 *
31 * For further information regarding this notice, see:
32 *
33 * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
34 *
35 */
36
37
38/*
39 * Copyright (C) 1990,91 Silicon Graphics, Inc.
40 *
41 _______________________________________________________________________
42 ______________ S I L I C O N G R A P H I C S I N C . ____________
43 |
44 | $Revision: 1.1.1.1 $
45 |
46 | Description:
47 | Manager for scheduling and triggering sensors. The manager
48 | maintains a queue of delay sensors (derived from SoDelayQueueSensor)
49 | and timer sensors (derived from SoTimerQueueSensor).
50 |
51 | Classes
52 | SoSensorManager
53 |
54 | Author(s) : Nick Thompson, Gavin Bell
55 |
56 ______________ S I L I C O N G R A P H I C S I N C . ____________
57 _______________________________________________________________________
58 */
59
60#ifndef _SO_SENSOR_MANAGER_
61#define _SO_SENSOR_MANAGER_
62
64#include <Inventor/SbTime.h>
65
66class SoSensor;
69class SoTimerSensor;
70class SoAlarmSensor;
71
73 public:
74
78
81 void setChangedCallback(void (*funcArg)(void *), void *data)
82 { changedFunc = funcArg; changedFuncData = data; }
83
89
94
100
105 void processDelayQueue(bool isIdle);
106
109
112
115 { return (delayQueue != NULL); }
116
121
124 int doSelect(int nfds, fd_set *readfds, fd_set *writefds,
125 fd_set *exceptfds,
126 struct timeval *userTimeOut);
127 private:
128 SoSensor *delayQueue;
129 SoSensor *timerQueue;
130 SoSensor *rescheduleQueue;
131
134 SbTime delayQTimeout;
135 SoAlarmSensor *delayQTimeoutSensor;
136 static void delayQTimeoutCB(void *, SoSensor *);
137
143 int processingQueue;
144
145 uint32_t delayQCount;
146
148 void insert(SoSensor *s, SoSensor *&head);
149 void remove(SoSensor *s, SoSensor *&head);
150
152 void (*changedFunc)(void *);
153 void *changedFuncData;
154
156 void notifyChanged();
157};
158
159#endif /* _SO_SENSOR_MANAGER_ */
#define SoINTERNAL
Definition SbBasic.h:155
#define INVENTOR_API
Disable some annoying warnings on MSVC 6.
Definition SbSystem.h:77
unsigned int uint32_t
Definition SbTypeDefs.h:44
Class for representation of a time.
Definition SbTime.h:89
Triggers a callback once sometime in the future.
Abstract base class for sensors not dependent on time.
void setDelaySensorTimeout(const SbTime &t)
Set/get delay queue sensors (OneShot, Node, Path, etc) timeout value.
void removeDelaySensor(SoDelayQueueSensor *s)
void removeRescheduledTimer(SoTimerQueueSensor *s)
bool isDelaySensorPending()
Returns TRUE if there is at least one sensor in the delay queue.
int doSelect(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *userTimeOut)
Just like UNIX select() call, but checks sensor queues while waiting for events.
bool isTimerSensorPending(SbTime &tm)
Returns TRUE if there is at least one sensor in the timer queue.
void processDelayQueue(bool isIdle)
Process all sensors in the delay queue.
void insertDelaySensor(SoDelayQueueSensor *s)
Insert/remove an delay or timer event into/from the appropriate queue.
void rescheduleTimer(SoTimerSensor *s)
Timers are all rescheduled at the same time, after they have been triggered.
void setChangedCallback(void(*funcArg)(void *), void *data)
Set up a function to call when either queue has a sensor added or removed.
void insertTimerSensor(SoTimerQueueSensor *s)
void removeTimerSensor(SoTimerQueueSensor *s)
void processTimerQueue()
Process appropriate sensors in the timer queue based on current time.
const SbTime & getDelaySensorTimeout()
void processImmediateQueue()
Process all immediate (priority 0) sensors in the delay queue.
SoSensorManager()
Constructor, destructor.
Abstract base class for Inventor sensors.
Definition SoSensor.h:108
Abstract base class for sensors dependent on time.
Sensor that triggers callback repeatedly at regular intervals.