SoDelayQueueSensor(3IV)NAMESoDelayQueueSensor (SoDelQSens) - abstract base class for sensors not
dependent on time
INHERITS FROM
SoSensor > SoDelayQueueSensorSYNOPSIS
#include <Inventor_c/sensors/SoDelayQueueSensor.h>
typedef SoDelayQueueSensor SoDelQSens
Functions from class SoDelayQueueSensor:
void SoDelQSensSetPri(SoDelQSens *this, uint32_t pri)
uint32_t SoDelQSensGetPri(SoDelQSens *this)
uint32_t SoDelQSensGetDefaultPriority()
void SoDelQSensSched(SoDelQSens *this)
void SoDelQSensUnsched(SoDelQSens *this)
SbBool SoDelQSensIsSched(SoDelQSens *this)
Functions from class SoSensor:
void SoDelQSensSetFunc(SoDelQSens *this, SoSensorCB
*callbackFunction)
SoSensorCB * SoDelQSensGetFunc(const SoDelQSens *this)
void SoDelQSensSetData(SoDelQSens *this, void
*callbackData)
void * SoDelQSensGetData(const SoDelQSens *this)
DESCRIPTION
Delay queue sensors are separate from timer queue sensors (see
SoTimerQueueSensor) and provide methods for setting the relative
priorities of the sensors in the delay queue (sensors with higher
priorities will be triggered first).
Sensors with non-zero priorities are added to the delay queue when
scheduled, and are all processed once, in order, when the delay queue is
processed, which normally happens as part of your program's main loop
(see SoXtMainLoop() or SoDBDoSelect()). Typically, the delay queue is
processed whenever there are no events waiting to be distributed and
there are no timer queue sensors waiting to be triggered. The delay queue
also has a timeout to ensure that delay queue sensors are triggered even
if there are always events or timer sensors waiting; see
SoDBSetDelaySensorTimeout().
Sensors with priority 0 are treated specially. Priority 0 sensors are
triggered almost immediately after they are scheduled, before the program
returns to the main loop. Priority 0 sensors are not necessarily
triggered immediately when they are scheduled, however; if they are
scheduled as part of the evaluation of a field connection network they
Page 1SoDelayQueueSensor(3IV)
may not be triggered until the evaluation of the network is complete.
Also, if a priority 0 sensor is scheduled within the callback method of
another priority 0 sensor, it will not be triggered until the callback
method is complete (also note that if more than one priority 0 sensor is
scheduled, the order in which they fire is undefined).
FUNCTIONS
void SoDelQSensSetPri(SoDelQSens *this, uint32_t pri)
uint32_t SoDelQSensGetPri(SoDelQSens *this)
Sets/gets the priority of the sensor. Priorities can be changed at
any time; if the priority is changed to zero and it is already
scheduled, the sensor is immediately triggered and removed from the
queue.
uint32_t SoDelQSensGetDefaultPriority()
Returns the default delay queue sensor priority, which is 100.
void SoDelQSensSched(SoDelQSens *this)
If this sensor's priority is non-zero, adds this sensor to the list
of delay queue sensors ready to be triggered. This is a way of
making a sensor fire without changing the thing it is sensing.
Calling sched() within the callback function causes the sensor to be
called repeatedly. Because sensors are processed only once every
time the delay queue is processed (even if they reschedule
themselves), timers and events will still be processed. This should
not be done with a priority zero sensor because an infinite loop
will result.
void SoDelQSensUnsched(SoDelQSens *this)
If this sensor is scheduled, removes it from the delay queue so that
it will not be triggered.
SbBool SoDelQSensIsSched(SoDelQSens *this)
Returns TRUE if this sensor has been scheduled and is waiting in the
delay queue to be triggered. Sensors are removed from the queue
before their callback function is triggered.
SEE ALSO
SoTimerQueueSensor, SoDataSensor, SoFieldSensor, SoIdleSensor,
SoOneShotSensor, SoNodeSensor, SoPathSensor, SoSensorManager
Page 2