X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fstructure%2Fsubsystem_mgr.cxx;h=ee9c15d1750dab1ab90d5e02b1612f1a4712fa1d;hb=4e46bb667179cd45cfb2f9934734ceddd1ea01b4;hp=8109f41132b6397802308b60ac1b2c6ed54aa985;hpb=ff7e70f4d570c472bbc6fe4198483d927914a35e;p=simgear.git diff --git a/simgear/structure/subsystem_mgr.cxx b/simgear/structure/subsystem_mgr.cxx index 8109f411..ee9c15d1 100644 --- a/simgear/structure/subsystem_mgr.cxx +++ b/simgear/structure/subsystem_mgr.cxx @@ -5,6 +5,8 @@ #include "exception.hxx" #include "subsystem_mgr.hxx" +#include + //////////////////////////////////////////////////////////////////////// @@ -74,29 +76,27 @@ SGSubsystem::is_suspended () const void SGSubsystem::printTimingInformation () { - SGTimeStamp startTime, endTime; - long duration; + SGTimeStamp startTime; for ( eventTimeVecIterator i = timingInfo.begin(); i != timingInfo.end(); i++) { if (i == timingInfo.begin()) { startTime = i->getTime(); } else { - endTime = i->getTime(); - duration = (endTime - startTime); + SGTimeStamp endTime = i->getTime(); + SG_LOG(SG_GENERAL, SG_ALERT, "- Getting to timestamp : " + << i->getName() << " takes " << endTime - startTime + << " sec."); startTime = endTime; - SG_LOG(SG_GENERAL, SG_ALERT, "- Getting to timestamp : " << i->getName() << " takes " << duration << " usec."); } } } -void SGSubsystem::stamp(string name) +void SGSubsystem::stamp(const string& name) { - SGTimeStamp now; - now.stamp(); - timingInfo.push_back(TimingInfo(name, now)); + timingInfo.push_back(TimingInfo(name, SGTimeStamp::now())); } @@ -110,10 +110,11 @@ SGSubsystemGroup::SGSubsystemGroup () SGSubsystemGroup::~SGSubsystemGroup () { - for (unsigned int i = 0; i < _members.size(); i++) + // reverse order to prevent order dependency problems + for (unsigned int i = _members.size(); i > 0; i--) { - _members[i]->printTimingStatistics(); - delete _members[i]; + _members[i-1]->printTimingStatistics(); + delete _members[i-1]; } } @@ -148,8 +149,9 @@ SGSubsystemGroup::bind () void SGSubsystemGroup::unbind () { - for (unsigned int i = 0; i < _members.size(); i++) - _members[i]->subsystem->unbind(); + // reverse order to prevent order dependency problems + for (unsigned int i = _members.size(); i > 0; i--) + _members[i-1]->subsystem->unbind(); } void @@ -157,11 +159,10 @@ SGSubsystemGroup::update (double delta_time_sec) { for (unsigned int i = 0; i < _members.size(); i++) { - SGTimeStamp start, now; - start.stamp(); + SGTimeStamp timeStamp = SGTimeStamp::now(); _members[i]->update(delta_time_sec); // indirect call - now.stamp(); - long b = ( now - start ); + timeStamp = timeStamp - SGTimeStamp::now(); + double b = timeStamp.toUSecs(); _members[i]->updateExecutionTime(b); double threshold = _members[i]->getTimeWarningThreshold(); if (( b > threshold ) && (b > 10000)) { @@ -382,7 +383,8 @@ SGSubsystemMgr::bind () void SGSubsystemMgr::unbind () { - for (int i = 0; i < MAX_GROUPS; i++) + // reverse order to prevent order dependency problems + for (int i = MAX_GROUPS-1; i >= 0; i--) _groups[i].unbind(); }