00001 #ifndef QRK_CONDITION_VARIABLE_H 00002 #define QRK_CONDITION_VARIABLE_H 00003 00013 #include <memory> 00014 00015 00016 namespace qrk 00017 { 00018 class Lock; 00019 00023 class ConditionVariable 00024 { 00025 ConditionVariable(const ConditionVariable& rhs); 00026 ConditionVariable& operator = (const ConditionVariable& rhs); 00027 00028 struct pImpl; 00029 const std::auto_ptr<pImpl> pimpl; 00030 00031 public: 00032 enum { 00033 NoTimeout = -1, 00034 }; 00035 ConditionVariable(void); 00036 ~ConditionVariable(void); 00037 00038 bool isWaiting(void); 00039 void wakeup(void); 00040 void wakeupAll(void); 00041 00042 bool wait(Lock* lock, int timeout = NoTimeout); 00043 }; 00044 } 00045 00046 #endif /* !QRK_CONDITION_VARIABLE_H */