summaryrefslogtreecommitdiff
path: root/TAO/examples/RTScheduling/DT_Creator.h
blob: da03d5b5f3f3d735d363f88661d40c6bb076dee4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
//$Id$
#ifndef DT_CREATOR_H
#define DT_CREATOR_H

#include "orbsvcs/CosNamingC.h"
#include "ace/Service_Config.h"
#include "ace/Service_Object.h"
#include "tao/RTScheduling/RTScheduler.h"
#include "ace/Arg_Shifter.h"
#include "POA_Holder.h"
#include "Job_i.h"
#include "Synch_i.h"

class Thread_Task;
class Task;


typedef Thread_Task **DT_LIST;
typedef POA_Holder **POA_LIST;
typedef Job_i **JOB_LIST;

class DT_Creator : public ACE_Service_Object
{
 public:
  DT_Creator (void);

  virtual ~DT_Creator (void);

  int init (int argc, char *argv []);

  int dt_task_init (ACE_TArg_Shifter<char>& arg_shifter);

  virtual void create_distributable_threads (RTScheduling::Current_ptr  current
					     ACE_ENV_ARG_DECL_WITH_DEFAULTS);

  void activate_poa_list (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS);
  void activate_job_list (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS);
  void activate_schedule (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS);

  virtual void yield (int suspend_time,
		      Thread_Task* task) = 0;

  virtual void wait (void) = 0;

  virtual CORBA::Policy_ptr sched_param (int importance) = 0;
  
  virtual Thread_Task* create_thr_task (int importance,
					int start_time,
					int load,
					int iter,
					int dist,
					char *job_name) = 0;
  //  virtual Task* task (void) = 0;
  
  /// Resolve the naming service.
  int resolve_naming_service (ACE_ENV_SINGLE_ARG_DECL);

  int dt_count (void);

  void dt_ended (void);
  void job_ended (void);

  void check_ifexit (void);

  void log_msg (char* msg);

  void orb (CORBA::ORB_ptr);
  CORBA::ORB_ptr orb (void);

  ACE_Time_Value* base_time (void);  
  void base_time (ACE_Time_Value*);  

  ACE_hrtime_t base_hr_time (void);  

  virtual int total_load (void) = 0;

  RTScheduling::Current_ptr current (void); 

  Synch_i* synch (void);

  void register_synch_obj (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS);

  int activate_root_poa (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS);
  
 protected:


  DT_LIST dt_list_;
  POA_LIST poa_list_;
  JOB_LIST job_list_;
  //Fixed_Priority_Scheduler* scheduler_;
  int dt_count_;
  int poa_count_;
  int job_count_;
  CORBA::ORB_var orb_;
  /// Mutex to serialize access to our internal state.
  ACE_Lock* state_lock_;
  ACE_Lock* shutdown_lock_;
  int active_dt_count_;
  int active_job_count_;
  char** log;
  ACE_Time_Value* base_time_;
  RTScheduling::Current_var current_; 
  /// RT ORB
  RTCORBA::RTORB_var rt_orb_;
  /// Reference to the root poa.
  PortableServer::POA_var root_poa_;
  /// A naming context.
  CosNaming::NamingContextExt_var naming_;
  char* file_name_;
  char* log_file_name_;
  ACE_UINT32 gsf_;
  Synch_i* synch_;
};


#endif /*DT_CREATOR_H*/