From: Alexei M. <al...@ca...> - 2008-10-27 12:45:22
|
We are moving towards a proper state machine to describe a subsystem. Our subsystems typically have 1-to-1 mapping to threads. A component is usually multi-threaded and is made up from several subsystems. Status of a subsystem is now described in 2 orthogonal dimensions: state and health. alexm The following is from gbxutilacfr/status.h // Current state in the subsystem's state machine. // E.i. what is the subsystem doing? SubsystemState state; // Subsystem's health. // E.i. how is the subsystem doing? SubsystemHealth health; //! Possible subsystem status values enum SubsystemState { //! Subsystem has been created but has not started initialisation process. SubsystemIdle, //! Subsystem is preparing to work, e.g. initialising its resources, etc. SubsystemInitialising, //! Subsystem is fully initialised and is performing its function. SubsystemWorking, //! Subsystem is preparing to shutdown, e.g. releasing its resources, etc. SubsystemFinalising, //! Subsystem is not longer functioning. SubsystemShutdown }; //! Returns string equivalent of state enumerator. std::string toString( SubsystemState state ); //! Possible subsystem status values enum SubsystemHealth { //! Subsystem is OK SubsystemOk, //! Subsystem has encountered an abnormal but non-fault condition SubsystemWarning, //! Subsystem has declared a fault SubsystemFault, //! Subsystem has not been heard from for an abnormally long time SubsystemStalled }; |