#include "Thread_Task.h" #include "DT_Creator.h" #include "Task_Stats.h" #include "tao/ORB_Core.h" #include "ace/High_Res_Timer.h" #include "ace/Atomic_Op.h" Thread_Task::Thread_Task () : start_time_ (0), load_ (0), iter_ (0), count_ (0), importance_ (0), dt_creator_ (0), base_time_ (0), dist_ (0), job_name_ (), task_stats_ (0) { } int Thread_Task::svc () { try { if (TAO_debug_level > 0) { ACE_DEBUG ((LM_DEBUG, "Thread_Task::svc %d\n", importance_)); } const char * name = 0; CORBA::Policy_var implicit_sched_param = CORBA::Policy::_duplicate (sched_param_.in ()); this->current_->begin_scheduling_segment (name, sched_param_.in (), implicit_sched_param.in ()); RTScheduling::Current::IdType_var guid = this->current_->id (); ACE_OS::memcpy (&count_, guid->get_buffer (), guid->length ()); ACE_TCHAR msg [BUFSIZ]; ACE_OS::sprintf (msg, ACE_TEXT("Thread_Task::svc Imp=%d Guid=") ACE_SIZE_T_FORMAT_SPECIFIER ACE_TEXT("\n"), importance_, count_); dt_creator_->log_msg (ACE_TEXT_ALWAYS_CHAR(msg)); this->perform_task (); this->current_->end_scheduling_segment (name); dt_creator_->dt_ended () ; } catch (const CORBA::THREAD_CANCELLED &) { // Threads can be cancelled. } catch (const CORBA::Exception& ex) { ex._tao_print_exception ("Caught exception:"); } return 0; } int Thread_Task::importance () { return this->importance_; } time_t Thread_Task::start_time () { return this->start_time_; } int Thread_Task::perform_task () { return 0; } const char* Thread_Task::job () { return job_name_.in (); } void Thread_Task::job (Job_ptr job) { job_ = Job::_duplicate (job); } int Thread_Task::dist () { return this->dist_; } void Thread_Task::dump_stats () { ACE_TCHAR fname [BUFSIZ]; ACE_OS::sprintf (fname, ACE_TEXT("DT_") ACE_SIZE_T_FORMAT_SPECIFIER ACE_TEXT(".dat"), count_); if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG, "File name %s\n", fname)); ACE_TCHAR msg [BUFSIZ]; ACE_OS::sprintf (msg, ACE_TEXT("#Schedule Output for DT ") ACE_SIZE_T_FORMAT_SPECIFIER, count_); task_stats_->dump_samples (fname, msg); }