summaryrefslogtreecommitdiff
path: root/TAO/examples/RTScheduling/MIF_Scheduler/MIF_Scheduler.h
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/examples/RTScheduling/MIF_Scheduler/MIF_Scheduler.h')
-rw-r--r--TAO/examples/RTScheduling/MIF_Scheduler/MIF_Scheduler.h142
1 files changed, 142 insertions, 0 deletions
diff --git a/TAO/examples/RTScheduling/MIF_Scheduler/MIF_Scheduler.h b/TAO/examples/RTScheduling/MIF_Scheduler/MIF_Scheduler.h
new file mode 100644
index 00000000000..18a16e78234
--- /dev/null
+++ b/TAO/examples/RTScheduling/MIF_Scheduler/MIF_Scheduler.h
@@ -0,0 +1,142 @@
+//$Id$
+
+#ifndef MIF_SCHEDULER_H
+#define MIF_SCHEDULER_H
+
+#include "../MIF_SchedulingC.h"
+
+#include "tao/orbconf.h"
+#include "tao/LocalObject.h"
+#include "tao/RTScheduling/RTScheduler.h"
+
+#include "ace/Message_Queue.h"
+#include "ace/Null_Condition.h"
+#include "ace/Condition_Thread_Mutex.h"
+#include "ace/Synch_Traits.h"
+
+class DT : public ACE_Message_Block
+{
+ public:
+ DT (TAO_SYNCH_MUTEX &lock,
+ int guid);
+
+ void suspend (void);
+ void resume (void);
+
+ private:
+ TAO_SYNCH_CONDITION dt_cond_;
+ int guid_;
+ int eligible_;
+};
+
+class Segment_Sched_Param_Policy:
+public MIF_Scheduling::SegmentSchedulingParameterPolicy,
+ public TAO_Local_RefCounted_Object
+{
+ public:
+ virtual CORBA::Short importance (void);
+
+ virtual void importance (CORBA::Short importance);
+
+ CORBA::Policy_ptr copy (void);
+
+ void destroy (void);
+
+ private:
+ CORBA::Short importance_;
+};
+
+typedef ACE_Message_Queue<ACE_NULL_SYNCH> DT_Message_Queue;
+
+class MIF_Scheduler:
+public MIF_Scheduling::MIF_Scheduler,
+public TAO_Local_RefCounted_Object
+{
+ public:
+
+ MIF_Scheduler (CORBA::ORB_ptr orb);
+
+ ~MIF_Scheduler (void);
+
+
+ virtual MIF_Scheduling::SegmentSchedulingParameterPolicy_ptr
+ create_segment_scheduling_parameter (CORBA::Short segment_priority);
+
+ void wait (void);
+
+ void resume_main (void);
+
+ void incr_thr_count (void);
+
+ virtual void begin_new_scheduling_segment (const RTScheduling::Current::IdType & guid,
+ const char * name,
+ CORBA::Policy_ptr sched_param,
+ CORBA::Policy_ptr implicit_sched_param);
+
+ virtual void begin_nested_scheduling_segment (const RTScheduling::Current::IdType & guid,
+ const char * name,
+ CORBA::Policy_ptr sched_param,
+ CORBA::Policy_ptr implicit_sched_param);
+
+ virtual void update_scheduling_segment (const RTScheduling::Current::IdType & guid,
+ const char * name,
+ CORBA::Policy_ptr sched_param,
+ CORBA::Policy_ptr implicit_sched_param);
+
+ virtual void end_scheduling_segment (const RTScheduling::Current::IdType & guid,
+ const char * name);
+
+ virtual void end_nested_scheduling_segment (const RTScheduling::Current::IdType & guid,
+ const char * name,
+ CORBA::Policy_ptr outer_sched_param);
+
+ virtual void send_request (PortableInterceptor::ClientRequestInfo_ptr ri);
+
+ virtual void receive_request (PortableInterceptor::ServerRequestInfo_ptr ri,
+ RTScheduling::Current::IdType_out guid,
+ CORBA::String_out name,
+ CORBA::Policy_out sched_param,
+ CORBA::Policy_out implicit_sched_param);
+
+ virtual void send_reply (PortableInterceptor::ServerRequestInfo_ptr ri);
+
+ virtual void send_exception (PortableInterceptor::ServerRequestInfo_ptr ri);
+
+ virtual void send_other (PortableInterceptor::ServerRequestInfo_ptr ri);
+
+ virtual void send_poll (PortableInterceptor::ClientRequestInfo_ptr ri);
+
+ virtual void receive_reply (PortableInterceptor::ClientRequestInfo_ptr ri);
+
+ virtual void receive_exception (PortableInterceptor::ClientRequestInfo_ptr ri);
+
+ virtual void receive_other (PortableInterceptor::ClientRequestInfo_ptr ri);
+
+ virtual void cancel (const RTScheduling::Current::IdType & guid);
+
+ virtual CORBA::PolicyList * scheduling_policies (void);
+
+ virtual void scheduling_policies (const CORBA::PolicyList & scheduling_policies);
+
+ virtual CORBA::PolicyList * poa_policies (void);
+
+ virtual char * scheduling_discipline_name (void);
+
+ virtual RTScheduling::ResourceManager_ptr create_resource_manager (const char * name,
+ CORBA::Policy_ptr scheduling_parameter);
+
+ virtual void set_scheduling_parameter (PortableServer::Servant & resource,
+ const char * name,
+ CORBA::Policy_ptr scheduling_parameter);
+
+ private:
+ RTScheduling::Current_var current_;
+ TAO_SYNCH_MUTEX lock_;
+ TAO_SYNCH_MUTEX wait_lock_;
+ TAO_SYNCH_CONDITION wait_cond_;
+ DT_Message_Queue ready_que_;
+ DT_Message_Queue wait_que_;
+ int wait_;
+};
+
+#endif //MIF_SCHEDULER_H