summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/performance-tests/RTEvent/lib/Send_Task.cpp
diff options
context:
space:
mode:
authorcoryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2002-02-27 09:36:16 +0000
committercoryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2002-02-27 09:36:16 +0000
commitf0e4bc59f935716dae754449bae9b042d42c7fc0 (patch)
treec7770a26da0b63d3e81de8282cd2df9ae4808160 /TAO/orbsvcs/performance-tests/RTEvent/lib/Send_Task.cpp
parentaa8609f2e7f71a09bd6678b82e1b232ffee4139f (diff)
downloadATCD-f0e4bc59f935716dae754449bae9b042d42c7fc0.tar.gz
ChangeLogTag:Wed Feb 27 01:33:44 2002 Carlos O'Ryan <coryan@uci.edu>
Diffstat (limited to 'TAO/orbsvcs/performance-tests/RTEvent/lib/Send_Task.cpp')
-rw-r--r--TAO/orbsvcs/performance-tests/RTEvent/lib/Send_Task.cpp83
1 files changed, 83 insertions, 0 deletions
diff --git a/TAO/orbsvcs/performance-tests/RTEvent/lib/Send_Task.cpp b/TAO/orbsvcs/performance-tests/RTEvent/lib/Send_Task.cpp
new file mode 100644
index 00000000000..af3a4ea086f
--- /dev/null
+++ b/TAO/orbsvcs/performance-tests/RTEvent/lib/Send_Task.cpp
@@ -0,0 +1,83 @@
+/**
+ * @file Send_Task.cpp
+ *
+ * $Id$
+ *
+ * @author Carlos O'Ryan <coryan@uci.edu>
+ */
+
+#include "Send_Task.h"
+#include "orbsvcs/Time_Utilities.h"
+
+ACE_RCSID(TAO_PERF_RTEC, Send_Task, "$Id$")
+
+Send_Task::Send_Task (void)
+ : iterations_ (0)
+ , period_in_usecs_ (0)
+ , event_type_ (0)
+ , event_source_ (0)
+ , barrier_ (0)
+ , stop_ (0)
+{
+}
+
+void
+Send_Task::init (int iterations,
+ int period_in_usecs,
+ int event_type,
+ int event_source,
+ Supplier *supplier,
+ ACE_Barrier *barrier)
+{
+ this->iterations_ = iterations;
+ this->period_in_usecs_ = period_in_usecs;
+ this->event_type_ = event_type;
+ this->event_source_ = event_source;
+ this->supplier_ = Servant_var<Supplier> (supplier);
+ this->barrier_ = barrier;
+}
+
+void
+Send_Task::stop (void)
+{
+ ACE_GUARD (TAO_SYNCH_MUTEX, ace_mon, this->mutex_);
+ this->stop_ = 1;
+}
+
+int
+Send_Task::svc (void)
+{
+ if (this->barrier_ == 0)
+ return -1;
+
+ this->barrier_->wait ();
+
+ RtecEventComm::EventSet event (1);
+ event.length (1);
+ event[0].header.type = this->event_type_;
+ event[0].header.source = this->event_source_;
+ event[0].header.ttl = 1;
+
+ ACE_Time_Value period (0, this->period_in_usecs_);
+
+ for (int i = 0; i != this->iterations_; ++i)
+ {
+ ACE_OS::sleep (period);
+ {
+ ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, ace_mon, this->mutex_, -1);
+ if (this->stop_)
+ return 0;
+ }
+ ACE_hrtime_t creation = ACE_OS::gethrtime ();
+ ORBSVCS_Time::hrtime_to_TimeT (event[0].header.creation_time,
+ creation);
+ // push one event...
+ this->supplier_->push (event ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ return 0;
+}
+
+#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
+#elif defined(ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
+#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */