Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Institute of Technical Acoustics (ITA)
ITASimulationScheduler
Commits
2bfe3f9a
Commit
2bfe3f9a
authored
Mar 05, 2020
by
Pascal Palenda
Browse files
Introduce ITASimulationScheduler namespace - WIP
parent
aff95e94
Changes
8
Expand all
Hide whitespace changes
Inline
Side-by-side
include/ITASimulationScheduler/Raven/R_Raven.h
View file @
2bfe3f9a
This diff is collapsed.
Click to expand it.
include/ITASimulationScheduler/Raven/R_RavenConfig.h
View file @
2bfe3f9a
...
...
@@ -28,199 +28,204 @@
// STL includes
#include <string>
//! Raven Konfiguration
/**
* Wird die RavenConfig in einem Simulator verwendet (z.B. als Teil eines Tasks),
* dann wird das Makro 'RavenDataBasePath', also die Zeichenkette $(RavenDataBasePath)
* automatisch durch den ausfhrenden Simulator in das jeweils eingestellte
* Basisverzeichnis umgesetzt. Dies kann sich je nach Simulator unterscheiden und
* ist vor Allem bei verteilten Systemen nicht immer identisch.
*
* Es sollte fr alle Pfade immer so verwendet werden:
*
* Beispiel Directivity: $(RavenDataBasePath)/Directivities/Bratsche.daff
* Beispiel HRIR: $(RavenDataBasePath)/HRIR/ITAKunstkopf.daff
* Beispiel RPF: $(RavenDataBasePath)/Scenes/Eurogress/Eurogress.rpf
*
* \note $(RavenDataBasePath) wird durch den aktuellen Basispfad der Instanz ersetzt
*/
class
ITA_SIMULATION_SCHEDULER_API
CRavenConfig
namespace
ITASimulationScheduler
{
public:
//! Difference flags (bitvector)
enum
{
GEO_SCENE
=
1
<<
0
,
//!< Difference in selected Scene/Project
ROOM_HUMIDITY
=
1
<<
1
,
ROOM_STATPRESSURE
=
1
<<
2
,
ROOM_REVERBTIME
=
1
<<
3
,
ROOM_TEMPERATUR
=
1
<<
4
,
IS_ORDER_PS
=
1
<<
5
,
//!< Difference in Image Source Order fr Primrschallquellen (Direktschall)
IS_ORDER_SS
=
1
<<
6
,
//!< Difference in Image Source Order fr Sekundrschallquellen (Reflexionen)
RT_PORTDETECT_ELTHRESH
=
1
<<
7
,
RT_PORTDETECT_FILTERLENGTH
=
1
<<
8
,
RT_PORTDETECT_RESTIMESLOTS
=
1
<<
9
,
RT_PORTDETECT_NUMPARTICLES
=
1
<<
10
,
RT_SPHEREDETECT_ELTHRESH
=
1
<<
11
,
RT_SPHEREDETECT_FILTERLENGTH
=
1
<<
12
,
RT_SPHEREDETECT_RESTIMESLOTS
=
1
<<
13
,
RT_SPHEREDETECT_NUMPARTICLES
=
1
<<
14
,
RT_SPHEREDETECT_RADIUS
=
1
<<
15
,
RT_SPHEREDETECT_RESAZI
=
1
<<
16
,
RT_SPHEREDETECT_RESELE
=
1
<<
17
,
SIMSETS_ACCELETYPE
=
1
<<
18
,
SIMSETS_SAMPLERATE
=
1
<<
19
,
FILTENG_MAGRES
=
1
<<
20
,
//!< Filter enginge magnitude resolution
};
CRavenConfig
();
virtual
~
CRavenConfig
();
struct
Geometry
{
std
::
string
sSceneFileName
;
//!< Pfad zur Geometriedatei (.ac)
};
Geometry
oGeometry
;
//!< Konfiguration der Geometrie
struct
Room
//! Raven Konfiguration
/**
* Wird die RavenConfig in einem Simulator verwendet (z.B. als Teil eines Tasks),
* dann wird das Makro 'RavenDataBasePath', also die Zeichenkette $(RavenDataBasePath)
* automatisch durch den ausfhrenden Simulator in das jeweils eingestellte
* Basisverzeichnis umgesetzt. Dies kann sich je nach Simulator unterscheiden und
* ist vor Allem bei verteilten Systemen nicht immer identisch.
*
* Es sollte fr alle Pfade immer so verwendet werden:
*
* Beispiel Directivity: $(RavenDataBasePath)/Directivities/Bratsche.daff
* Beispiel HRIR: $(RavenDataBasePath)/HRIR/ITAKunstkopf.daff
* Beispiel RPF: $(RavenDataBasePath)/Scenes/Eurogress/Eurogress.rpf
*
* \note $(RavenDataBasePath) wird durch den aktuellen Basispfad der Instanz ersetzt
*/
class
ITA_SIMULATION_SCHEDULER_API
CRavenConfig
{
float
fTemperature
;
//!< Raumtemperatur in Grad Celsius
float
fHumidity
;
//!< Raumfeuchte in % [0..100]
float
fStaticPressure
;
//!< Statischer Luftdruck im Raum in Pascal
float
fReverberationTime
;
//!< Aproximated reverberation time (for filter length prediction, in s!)
};
Room
oRoom
;
//!< Konfiguration des Raumes
public:
//! Difference flags (bitvector)
enum
{
GEO_SCENE
=
1
<<
0
,
//!< Difference in selected Scene/Project
ROOM_HUMIDITY
=
1
<<
1
,
ROOM_STATPRESSURE
=
1
<<
2
,
ROOM_REVERBTIME
=
1
<<
3
,
ROOM_TEMPERATUR
=
1
<<
4
,
IS_ORDER_PS
=
1
<<
5
,
//!< Difference in Image Source Order fr Primrschallquellen (Direktschall)
IS_ORDER_SS
=
1
<<
6
,
//!< Difference in Image Source Order fr Sekundrschallquellen (Reflexionen)
RT_PORTDETECT_ELTHRESH
=
1
<<
7
,
RT_PORTDETECT_FILTERLENGTH
=
1
<<
8
,
RT_PORTDETECT_RESTIMESLOTS
=
1
<<
9
,
RT_PORTDETECT_NUMPARTICLES
=
1
<<
10
,
RT_SPHEREDETECT_ELTHRESH
=
1
<<
11
,
RT_SPHEREDETECT_FILTERLENGTH
=
1
<<
12
,
RT_SPHEREDETECT_RESTIMESLOTS
=
1
<<
13
,
RT_SPHEREDETECT_NUMPARTICLES
=
1
<<
14
,
RT_SPHEREDETECT_RADIUS
=
1
<<
15
,
RT_SPHEREDETECT_RESAZI
=
1
<<
16
,
RT_SPHEREDETECT_RESELE
=
1
<<
17
,
SIMSETS_ACCELETYPE
=
1
<<
18
,
SIMSETS_SAMPLERATE
=
1
<<
19
,
FILTENG_MAGRES
=
1
<<
20
,
//!< Filter enginge magnitude resolution
};
struct
ImageSources
{
int
iOrderPrimarySource
;
//!< Spiegelschallquellenordnung Primrschallquellen (Direktschall)
int
iOrderSecondarySource
;
//!< Spiegelschallquellenordnung Sekundrschallquellen (Reflexionen)
};
ImageSources
oImageSource
;
//!< Konfiguration der Image Sources
CRavenConfig
();
virtual
~
CRavenConfig
();
struct
RayTracer
{
struct
SphereDetector
struct
Geometry
{
unsigned
long
int
uliNumParticles
;
//!< Anzahl abgefeuerter Partikelstrahlen
float
fEnergyLossThreshold
;
//!< Energiegrenze fr Partikel in dB
float
fFilterLength
;
//!< Length of sphere detector filter in s (!)
float
fResolutionAzimuth
;
//!< Grad
float
fResolutionElevation
;
//!< Grad
float
fRadius
;
//!< Meter
float
fResolutionTimeSlots
;
//!< Time resolution is ms
std
::
string
sSceneFileName
;
//!< Pfad zur Geometriedatei (.ac)
};
SphereDetector
oSphereDetector
;
Geometry
oGeometry
;
//!< Konfiguration der Geometrie
struct
PortalDetector
struct
Room
{
unsigned
long
int
uliNumParticles
;
//!< Anzahl abgefeuerter Partikelstrahlen
float
f
EnergyLossThreshold
;
//!<
Energiegrenze fr Partikel in dB
float
f
FilterLength
;
//!< Length of portal detector filter in s (!)
float
fRe
solu
tionTime
Slots
;
//!< Time resolu
tion i
s ms (
!)
float
fTemperature
;
//!< Raumtemperatur in Grad Celsius
float
f
Humidity
;
//!<
Raumfeuchte in % [0..100]
float
f
StaticPressure
;
//!< Statischer Luftdruck im Raum in Pascal
float
fRe
verbera
tionTime
;
//!< Aproximated reverberation time (for filter length predic
tion
,
i
n s
!)
};
PortalDetector
oPortalDetector
;
};
RayTracer
oRayTracer
;
//!< Konfiguration des Ray Tracers
//! Geometrische Beschleunigungsalgorithmen
enum
{
BSP
=
0
,
//!< Binary Space Partitioning
HASHMAP
=
1
,
//!< Hashing
};
struct
SimulationSettings
{
int
iAccelerationType
;
//!< Geometrischer Beschleunigungsalgorithmus (BSP oder HASHMAP)
double
dSampleRate
;
//!< Abtastrate, mit der die Audiohardware sampelt
};
SimulationSettings
oSimulationSettings
;
//!< Konfiguration der Simulation
//! Bandfilter-Spektren
enum
{
WHOLE_OCTAVE_SPECTRUM
=
0
,
//!< Terzbandfilter
THIRD_OCTAVE_SPECTRUM
=
1
,
//!< Oktavbandfilter
};
struct
FilterEngine
{
int
iMagnitudesResolution
;
//!< Bandfilter-Auflsung (THIRD_OCTAVE oder WHOLE_OCTAVE)
};
FilterEngine
oFilterEngine
;
Room
oRoom
;
//!< Konfiguration des Raumes
//! Vergleicht die eigene Konfiguration gegen eine andere
/**
* \return Gibt den Difference flag zurck
*/
virtual
unsigned
int
Compare
(
const
CRavenConfig
&
oOtherConfig
);
//! Setzt die Konfiguration zurck
virtual
void
Reset
();
struct
ImageSources
{
int
iOrderPrimarySource
;
//!< Spiegelschallquellenordnung Primrschallquellen (Direktschall)
int
iOrderSecondarySource
;
//!< Spiegelschallquellenordnung Sekundrschallquellen (Reflexionen)
};
ImageSources
oImageSource
;
//!< Konfiguration der Image Sources
//! Setzt die Konfiguration auf sinnvolle Standardwerte
virtual
void
SetDefaults
();
struct
RayTracer
{
struct
SphereDetector
{
unsigned
long
int
uliNumParticles
;
//!< Anzahl abgefeuerter Partikelstrahlen
float
fEnergyLossThreshold
;
//!< Energiegrenze fr Partikel in dB
float
fFilterLength
;
//!< Length of sphere detector filter in s (!)
float
fResolutionAzimuth
;
//!< Grad
float
fResolutionElevation
;
//!< Grad
float
fRadius
;
//!< Meter
float
fResolutionTimeSlots
;
//!< Time resolution is ms
};
SphereDetector
oSphereDetector
;
struct
PortalDetector
{
unsigned
long
int
uliNumParticles
;
//!< Anzahl abgefeuerter Partikelstrahlen
float
fEnergyLossThreshold
;
//!< Energiegrenze fr Partikel in dB
float
fFilterLength
;
//!< Length of portal detector filter in s (!)
float
fResolutionTimeSlots
;
//!< Time resolution is ms (!)
};
PortalDetector
oPortalDetector
;
};
RayTracer
oRayTracer
;
//!< Konfiguration des Ray Tracers
//! Set the configuration from another object (copy from method)
virtual
void
Set
(
const
CRavenConfig
&
oSrc
);
//! Geometrische Beschleunigungsalgorithmen
enum
{
BSP
=
0
,
//!< Binary Space Partitioning
HASHMAP
=
1
,
//!< Hashing
};
//! Ld eine Konfiguration aus einer RPF-Datei
/**
* Ld smtliche vorhandenen Informationen aus einer
* Raven-Projektdatei und fllt nicht vorhandene Werte
* mit den Default-Werten aus, wie sie durch die Methode
* SetDefaults() gesetzt werden.
*
* \param sFilePath Pfad zur Datei (relativ oder absolut, keine Makros, berschreibt)
*
* \note Legacy-Support fr RPF-Dateien
*/
virtual
void
LoadFromRPFFile
(
const
std
::
string
&
sRPFFilePath
);
struct
SimulationSettings
{
int
iAccelerationType
;
//!< Geometrischer Beschleunigungsalgorithmus (BSP oder HASHMAP)
double
dSampleRate
;
//!< Abtastrate, mit der die Audiohardware sampelt
};
SimulationSettings
oSimulationSettings
;
//!< Konfiguration der Simulation
//! Ld eine Konfiguration aus einer INI-Datei
/**
* Ld smtliche vorhandenen Informationen aus einer
* INI-Datei und fllt nicht vorhandene Werte
* mit den Default-Werten aus, wie sie durch die Methode
* SetDefaults() gesetzt werden.
*
* \note Throws ITAException on error
*
* \param sFilePath Pfad zur Datei (relativ oder absolut, keine Makros, berschreibt)turn
*
*/
virtual
void
Load
(
const
std
::
string
&
sPath
);
//! Bandfilter-Spektren
enum
{
WHOLE_OCTAVE_SPECTRUM
=
0
,
//!< Terzbandfilter
THIRD_OCTAVE_SPECTRUM
=
1
,
//!< Oktavbandfilter
};
//! Speicher die Konfiguration in eine INI-Datei
/**
* Speichert die Konfigurationsparameter in eine INI-Datei
*
* \param sFilePath Pfad zur Datei (relativ oder absolut, keine Makros, berschreibt)
*/
virtual
void
Store
(
const
std
::
string
&
sPath
)
const
;
struct
FilterEngine
{
int
iMagnitudesResolution
;
//!< Bandfilter-Auflsung (THIRD_OCTAVE oder WHOLE_OCTAVE)
};
FilterEngine
oFilterEngine
;
//! Vergleicht die eigene Konfiguration gegen eine andere
/**
* \return Gibt den Difference flag zurck
*/
virtual
unsigned
int
Compare
(
const
CRavenConfig
&
oOtherConfig
);
//! Setzt die Konfiguration zurck
virtual
void
Reset
();
//! Setzt die Konfiguration auf sinnvolle Standardwerte
virtual
void
SetDefaults
();
//! Set the configuration from another object (copy from method)
virtual
void
Set
(
const
CRavenConfig
&
oSrc
);
//! Ld eine Konfiguration aus einer RPF-Datei
/**
* Ld smtliche vorhandenen Informationen aus einer
* Raven-Projektdatei und fllt nicht vorhandene Werte
* mit den Default-Werten aus, wie sie durch die Methode
* SetDefaults() gesetzt werden.
*
* \param sFilePath Pfad zur Datei (relativ oder absolut, keine Makros, berschreibt)
*
* \note Legacy-Support fr RPF-Dateien
*/
virtual
void
LoadFromRPFFile
(
const
std
::
string
&
sRPFFilePath
);
//! Ld eine Konfiguration aus einer INI-Datei
/**
* Ld smtliche vorhandenen Informationen aus einer
* INI-Datei und fllt nicht vorhandene Werte
* mit den Default-Werten aus, wie sie durch die Methode
* SetDefaults() gesetzt werden.
*
* \note Throws ITAException on error
*
* \param sFilePath Pfad zur Datei (relativ oder absolut, keine Makros, berschreibt)turn
*
*/
virtual
void
Load
(
const
std
::
string
&
sPath
);
//! Speicher die Konfiguration in eine INI-Datei
/**
* Speichert die Konfigurationsparameter in eine INI-Datei
*
* \param sFilePath Pfad zur Datei (relativ oder absolut, keine Makros, berschreibt)
*/
virtual
void
Store
(
const
std
::
string
&
sPath
)
const
;
//! Erzeugt einen String mit den Parametern
/**
* \return Zeichenausgabe
*/
virtual
std
::
string
ToString
()
const
;
//! Validates settings to detect odd configuration
/*
* Validation based on meaningfull settings to detect odd settings,
* i.e. for early warning purpose. A return value greater zero
* indicates a probable wrong config, though that does not necessarily
* mean that a problem will rise during simulation.
*
* Use validation to ensure good settings and ignore output if you
* know what you are doing.
*
* It is always recommended to start with default set, see SetDefaults()
*
* \return Difference bitvector containing flags about avery odd setting
*/
virtual
unsigned
int
Validate
()
const
;
};
//! Erzeugt einen String mit den Parametern
/**
* \return Zeichenausgabe
*/
virtual
std
::
string
ToString
()
const
;
//! Validates settings to detect odd configuration
/*
* Validation based on meaningfull settings to detect odd settings,
* i.e. for early warning purpose. A return value greater zero
* indicates a probable wrong config, though that does not necessarily
* mean that a problem will rise during simulation.
*
* Use validation to ensure good settings and ignore output if you
* know what you are doing.
*
* It is always recommended to start with default set, see SetDefaults()
*
* \return Difference bitvector containing flags about avery odd setting
*/
virtual
unsigned
int
Validate
()
const
;
};
}
#endif // __R_RAVEN_CONFIG_H__
include/ITASimulationScheduler/Raven/R_RavenLocalScheduler.h
View file @
2bfe3f9a
...
...
@@ -46,217 +46,222 @@
#include <list>
#include <vector>
//! Lokaler Scheduler fr Raven-Simulationsauftrge
/**
* Dieser lokal arbeitende Scheduler erzeugt mehrere Threads fr Raven-Simulatoren und verteilt
* eingehende Tasks auf diese. Dabei arbeitet er so, dass die Threads mit unterschiedlichen
* Priorisierungen laufen und jeweils unterschiedliche Simulationsauftrge abarbeiten (DS, DS+IS, IS und RT).
* Andere Typen sind nicht erlaubt, und die Anzahl der verfgbaren Entitten (Receiver, Sources, Portals)
* hngt von der Einstellung der Raven-Simulatoren (CRavenSimulator) ab.
* Der lokale Scheduler verwirft smtliche Tasks, die nicht abgearbeitet werden konnten und von einem
* neuen Task unter folgenden auflagen verdngt wurden:
*
* 1. Exakt identische Konfiguration (CRavenConfig)
* 2. Identischer Auftragstyp (DS, DS+ER, ER oder DD)
* 3. Gleiche Szene (CRavenScene), d.h. smtliche Entitten identisch, aber mglicherweise unterschiedlicher State (CRaven*State)
*
* \todo Eventuell den Scheduler so einstellbar machen, dass er sich auch anders verhlt, z.B. NIE verdrngt. Dies
* knnte dann sinnvoll sein, wenn man den Scheduler als "Task-Queue" verwendet, um z.B. Trajektorien abzufahren und
* Impulsantworten zu generieren.
*/
class
ITA_SIMULATION_SCHEDULER_API
CRavenLocalScheduler
:
public
IRavenSimulationSchedulerInterface
,
public
VistaThreadLoop
namespace
ITASimulationScheduler
{
public:
//! Scheduler configuration
class
ITA_SIMULATION_SCHEDULER_API
CConfiguration
//! Lokaler Scheduler fr Raven-Simulationsauftrge
/**
* Dieser lokal arbeitende Scheduler erzeugt mehrere Threads fr Raven-Simulatoren und verteilt
* eingehende Tasks auf diese. Dabei arbeitet er so, dass die Threads mit unterschiedlichen
* Priorisierungen laufen und jeweils unterschiedliche Simulationsauftrge abarbeiten (DS, DS+IS, IS und RT).
* Andere Typen sind nicht erlaubt, und die Anzahl der verfgbaren Entitten (Receiver, Sources, Portals)
* hngt von der Einstellung der Raven-Simulatoren (CRavenSimulator) ab.
* Der lokale Scheduler verwirft smtliche Tasks, die nicht abgearbeitet werden konnten und von einem
* neuen Task unter folgenden auflagen verdngt wurden:
*
* 1. Exakt identische Konfiguration (CRavenConfig)
* 2. Identischer Auftragstyp (DS, DS+ER, ER oder DD)
* 3. Gleiche Szene (CRavenScene), d.h. smtliche Entitten identisch, aber mglicherweise unterschiedlicher State (CRaven*State)
*
* \todo Eventuell den Scheduler so einstellbar machen, dass er sich auch anders verhlt, z.B. NIE verdrngt. Dies
* knnte dann sinnvoll sein, wenn man den Scheduler als "Task-Queue" verwendet, um z.B. Trajektorien abzufahren und
* Impulsantworten zu generieren.
*/
class
ITA_SIMULATION_SCHEDULER_API
CRavenLocalScheduler
:
public
IRavenSimulationSchedulerInterface
,
public
VistaThreadLoop
{
public:
//! Thread configuration
class
ITA_SIMULATION_SCHEDULER_API
CThreadConfiguration
//! Scheduler configuration
class
ITA_SIMULATION_SCHEDULER_API
CConfiguration
{
public:
//! Process task assignment
enum
//! Thread configuration
class
ITA_SIMULATION_SCHEDULER_API
CThreadConfiguration
{
TIMEOUT
=
0
,
//!< Update task assignment using a timeout
EVENTSYNC
,
//!< Update task assignment when added (may use entire ressources)
CONTINUOUS
//!< Update tasks continuously (uses entire ressources)
public:
//! Process task assignment
enum
{
TIMEOUT
=
0
,
//!< Update task assignment using a timeout
EVENTSYNC
,
//!< Update task assignment when added (may use entire ressources)
CONTINUOUS
//!< Update tasks continuously (uses entire ressources)
};
int
iTaskProcessingMode
;
//!< One of \TaskAssignmentProcessing
int
iFieldOfDuty
;
//!< Field of duty for this thread (DS, ER, DD)
float
fUpdateRate
;
//!< Desired update rate for this thread in Hz
int
iPriority
;
//!< Thread priority, careful with this parameter!
std
::
string
sRavenDataBasePath
;
//!< Raven data base path
};
int
iTaskProcessingMode
;
//!< One of \TaskAssignmentProcessing
int
iFieldOfDuty
;
//!< Field of duty for this thread (DS, ER, DD)
float
fUpdateRate
;
//!< Desired update rate for this thread in Hz
int
iPriority
;
//!< Thread priority, careful with this parameter!
std
::
string
sRavenDataBasePath
;
//!< Raven data base path
std
::
string
sRavenDataBasePath
;
//!< Local path to RAVEN data, can be absolute or relative to executable
std
::
vector
<
CThreadConfiguration
>
voThreads
;
//!< List of thread configurations
std
::
string
ToString
()
const
;
};
std
::
string
sRavenDataBasePath
;
//!< Local path to RAVEN data, can be absolute or relative to executable
std
::
vector
<
CThreadConfiguration
>
voThreads
;
//!< List of thread configurations
//! Constructor with configuration
/**
* Creates a scheduler based on given configuration
*
* \param oConf Local scheduler configuration, see \Configuration
*
*/
CRavenLocalScheduler
(
const
CConfiguration
&
oConf
);
std
::
string
ToString
()
const
;
}
;
//! Destructor
virtual
~
CRavenLocalScheduler
()
;
//! Constructor with configuration
/**
* Creates a scheduler based on given configuration
*
* \param oConf Local scheduler configuration, see \Configuration
*
*/
CRavenLocalScheduler
(
const
CConfiguration
&
oConf
);
//! Alles RAVEN-artige intern abrumen und neu aufsetzen
/**
* \note Non-reentrant! Es darf wrend dieses Aufrufs keine andere Funktion parallel betreten werden
*/
virtual
void
Reset
();
//! Destructor
virtual
~
CRavenLocalScheduler
();
//! Laden der Geometrien aus einer Scene
/**
* \note Non-reentrant! Es darf wrend dieses Aufrufs keine andere Funktion parallel betreten werden
*/
virtual
void
AddTask
(
CRavenSimulationTask
*
pTask
);
//! Alles RAVEN-artige intern abrumen und neu aufsetzen
/**
* \note Non-reentrant! Es darf wrend dieses Aufrufs keine andere Funktion parallel betreten werden
*/
virtual
void
Reset
();
//! Preload geometry
virtual
void
LoadScene
(
const
std
::
string
&
);
//! Laden der Geometrien aus einer Scene
/**
* \note Non-reentrant! Es darf wrend dieses Aufrufs keine andere Funktion parallel betreten werden
*/
virtual
void
AddTask
(
CRavenSimulationTask
*
pTask
);
virtual
void
HandleTaskFinished
(
CRavenSimulationTask
*
pTask
,
CRavenSimulationResult
*
pResult
,
int
iErrorcode
);
virtual
void
HandleTaskDiscarded
(
CRavenSimulationTask
*
pTask
);
//! Preload geometry
virtual
void
LoadScene
(
const
std
::
string
&
);
virtual
bool
AttachSimulationResultHandler
(
IRavenSimulationSchedulerResultHandler
*
);
virtual
bool
DetachSimulationResultHandler
(
IRavenSimulationSchedulerResultHandler
*
);
virtual
void
HandleTaskFinished
(
CRavenSimulationTask
*
pTask
,
CRavenSimulationResult
*
pResult
,
int
iErrorcode
);
virtual
void
HandleTaskDiscarded
(
CRavenSimulationTask
*
pTask
);
virtual
bool
GetProfilerStatus
(
IRavenSimulationSchedulerInterface
::
CProfiler
&
oStatus
);
virtual
bool
AttachSimulationResultHandler
(
IRavenSimulationSchedulerResultHandler
*
);
virtual
bool
DetachSimulationResultHandler
(
IRavenSimulationSchedulerResultHandler
*
);
// --= Schnittstelle "VistaCoreThread" =--
virtual
bool
LoopBody
(
);
virtual
bool
GetProfilerStatus
(
IRavenSimulationSchedulerInterface
::
CProfiler
&
oStatus
);
// --= Schnittstelle "VistaCoreThread" =--
virtual
bool
LoopBody
();
class
CSimulationThread
:
public
VistaThreadLoop
{
public:
//! Erzeugt einen eigenstndigen Simulationsthread mit einer Raven-Instanz
CSimulationThread
(
CRavenLocalScheduler
*
pScheduler
,
const
CConfiguration
::
CThreadConfiguration
&
oConf
);
class
CSimulationThread
:
public
VistaThreadLoop
{
public:
//! Erzeugt einen eigenstndigen Simulationsthread mit einer Raven-Instanz
CSimulationThread
(
CRavenLocalScheduler
*
pScheduler
,
const
CConfiguration
::
CThreadConfiguration
&
oConf
);
virtual
~
CSimulationThread
();
virtual
~
CSimulationThread
();
//! Gibt true zurck, wenn kein Task bearbeitet wird
virtual
bool
IsIdle
();
//! Gibt true zurck, wenn
kein Task bearbeitet wird
virtual
bool
Is
Idle
()
;
//! Gibt true zurck, wenn
die Scene geladen ist
virtual
bool
Is
SceneLoaded
()
const
;
//! Gibt true zurck, wenn die Scene geladen ist
virtual
bool
IsSceneLoaded
()
const
;
//! Gibt den aktuellen Task oder NULL (Idle) zurck
/**
* \note Es gibt keine Garantie, dass der Task weiterhin existiert
*/
virtual
CRavenSimulationTask
*
GetCurrentTask
()
const
;
//! Gibt den aktuellen Task oder NULL (Idle) zurck
/**
* \note Es gibt keine Garantie, dass der Task weiterhin existiert
*/
virtual
CRavenSimulationTask
*
GetCurrentTask
()
const
;
//! Task retrieval loop
virtual
bool
LoopBody
();
//!
Task retrieval loop
virtual
bool
LoopBody
(
);
//!
Performs compute of given task
virtual
void
Compute
(
CRavenSimulationTask
*
pTask
);
//! P
erforms compute of given task
virtual
void
Compute
(
CRavenSimulationTask
*
pTask
);
//! P
reloads geometry