00001
00002
00003 #ifndef ACE_CONDITION_T_CPP
00004 #define ACE_CONDITION_T_CPP
00005
00006 #include "ace/Condition_T.h"
00007
00008 #if !defined (ACE_LACKS_PRAGMA_ONCE)
00009 # pragma once
00010 #endif
00011
00012 #if defined (ACE_HAS_THREADS)
00013
00014 #include "ace/Log_Msg.h"
00015
00016 #if !defined (__ACE_INLINE__)
00017 #include "ace/Condition_T.inl"
00018 #endif
00019
00020 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00021
00022 ACE_ALLOC_HOOK_DEFINE(ACE_Condition)
00023
00024 template <class MUTEX> void
00025 ACE_Condition<MUTEX>::dump (void) const
00026 {
00027 #if defined (ACE_HAS_DUMP)
00028
00029
00030 ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this));
00031 ACE_DEBUG ((LM_DEBUG, ACE_LIB_TEXT ("\n")));
00032 ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP));
00033 #endif
00034 }
00035
00036 template <class MUTEX>
00037 ACE_Thread_Condition<MUTEX>::ACE_Thread_Condition (MUTEX &m,
00038 const ACE_TCHAR *name,
00039 void *arg)
00040 : ACE_Condition<MUTEX> (m, USYNC_THREAD, name, arg)
00041 {
00042
00043 }
00044
00045 template <class MUTEX> void
00046 ACE_Thread_Condition<MUTEX>::dump (void) const
00047 {
00048 #if defined (ACE_HAS_DUMP)
00049
00050
00051 ACE_Condition<MUTEX>::dump ();
00052 #endif
00053 }
00054
00055 template <class MUTEX>
00056 ACE_Condition<MUTEX>::ACE_Condition (MUTEX &m,
00057 int type,
00058 const ACE_TCHAR *name,
00059 void *arg)
00060 :
00061 mutex_ (m)
00062 {
00063
00064
00065 if (ACE_OS::cond_init (&this->cond_,
00066 (short) type,
00067 name,
00068 arg) != 0)
00069 ACE_ERROR ((LM_ERROR,
00070 ACE_LIB_TEXT ("%p\n"),
00071 ACE_LIB_TEXT ("ACE_Condition::ACE_Condition")));
00072 }
00073
00074 template <class MUTEX>
00075 ACE_Condition<MUTEX>::~ACE_Condition (void)
00076 {
00077
00078
00079 if (this->remove () == -1)
00080 ACE_ERROR ((LM_ERROR,
00081 ACE_LIB_TEXT ("%p\n"),
00082 ACE_LIB_TEXT ("ACE_Condition::~ACE_Condition")));
00083 }
00084
00085 template <class MUTEX> int
00086 ACE_Condition<MUTEX>::wait (void)
00087 {
00088
00089 return ACE_OS::cond_wait (&this->cond_,
00090 &this->mutex_.lock_);
00091 }
00092
00093 template <class MUTEX> int
00094 ACE_Condition<MUTEX>::wait (MUTEX &mutex,
00095 const ACE_Time_Value *abstime)
00096 {
00097
00098 if (abstime == 0)
00099 return this->wait ();
00100 else
00101 {
00102 return ACE_OS::cond_timedwait (&this->cond_,
00103 &mutex.lock_,
00104 (ACE_Time_Value *) abstime);
00105 }
00106 }
00107
00108
00109
00110
00111
00112 template <class MUTEX> int
00113 ACE_Condition<MUTEX>::wait (const ACE_Time_Value *abstime)
00114 {
00115
00116 return this->wait (this->mutex_, abstime);
00117 }
00118
00119 ACE_END_VERSIONED_NAMESPACE_DECL
00120
00121 #endif
00122
00123 #endif