Fix bug #125
This commit is contained in:
parent
df35559246
commit
ce8ca7853c
2 changed files with 18 additions and 12 deletions
|
@ -306,6 +306,8 @@ FGIO::init()
|
||||||
// SG_LOG( SG_IO, SG_INFO, "I/O Channel initialization, " <<
|
// SG_LOG( SG_IO, SG_INFO, "I/O Channel initialization, " <<
|
||||||
// globals->get_channel_options_list()->size() << " requests." );
|
// globals->get_channel_options_list()->size() << " requests." );
|
||||||
|
|
||||||
|
_realDeltaTime = fgGetNode("/sim/time/delta-realtime-sec");
|
||||||
|
|
||||||
FGProtocol *p;
|
FGProtocol *p;
|
||||||
|
|
||||||
// we could almost do this in a single step except pushing a valid
|
// we could almost do this in a single step except pushing a valid
|
||||||
|
@ -339,30 +341,31 @@ FGIO::reinit()
|
||||||
|
|
||||||
// process any IO channel work
|
// process any IO channel work
|
||||||
void
|
void
|
||||||
FGIO::update( double delta_time_sec )
|
FGIO::update( double /* delta_time_sec */ )
|
||||||
{
|
{
|
||||||
// cout << "processing I/O channels" << endl;
|
// use wall-clock, not simulation, delta time, so that network
|
||||||
// cout << " Elapsed time = " << delta_time_sec << endl;
|
// protocols update when the simulation is paused
|
||||||
|
// see http://code.google.com/p/flightgear-bugs/issues/detail?id=125
|
||||||
|
double delta_time_sec = _realDeltaTime->getDoubleValue();
|
||||||
|
|
||||||
ProtocolVec::iterator i = io_channels.begin();
|
ProtocolVec::iterator i = io_channels.begin();
|
||||||
ProtocolVec::iterator end = io_channels.end();
|
ProtocolVec::iterator end = io_channels.end();
|
||||||
for (; i != end; ++i ) {
|
for (; i != end; ++i ) {
|
||||||
FGProtocol* p = *i;
|
FGProtocol* p = *i;
|
||||||
|
if (!p->is_enabled()) {
|
||||||
if ( p->is_enabled() ) {
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
p->dec_count_down( delta_time_sec );
|
p->dec_count_down( delta_time_sec );
|
||||||
double dt = 1 / p->get_hz();
|
double dt = 1 / p->get_hz();
|
||||||
if ( p->get_count_down() < 0.33 * dt ) {
|
if ( p->get_count_down() < 0.33 * dt ) {
|
||||||
p->process();
|
p->process();
|
||||||
p->inc_count();
|
p->inc_count();
|
||||||
while ( p->get_count_down() < 0.33 * dt ) {
|
while ( p->get_count_down() < 0.33 * dt ) {
|
||||||
p->inc_count_down( dt );
|
p->inc_count_down( dt );
|
||||||
}
|
}
|
||||||
// double ave = elapsed_time / p->get_count();
|
} // of channel processing
|
||||||
// cout << " ave rate = " << ave << endl;
|
} // of io_channels iteration
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
|
|
||||||
#include <simgear/compiler.h>
|
#include <simgear/compiler.h>
|
||||||
#include <simgear/structure/subsystem_mgr.hxx>
|
#include <simgear/structure/subsystem_mgr.hxx>
|
||||||
|
#include <simgear/props/props.hxx>
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
@ -58,6 +59,8 @@ private:
|
||||||
|
|
||||||
typedef std::vector< FGProtocol* > ProtocolVec;
|
typedef std::vector< FGProtocol* > ProtocolVec;
|
||||||
ProtocolVec io_channels;
|
ProtocolVec io_channels;
|
||||||
|
|
||||||
|
SGPropertyNode_ptr _realDeltaTime;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue