00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef __CORE_THREADING_INTERRUPTIBLE_BARRIER_H_
00025 #define __CORE_THREADING_INTERRUPTIBLE_BARRIER_H_
00026
00027 #include <core/threading/barrier.h>
00028 #include <core/utils/refptr.h>
00029
00030 namespace fawkes {
00031 #if 0
00032 }
00033 #endif
00034
00035 class InterruptibleBarrierData;
00036 class ThreadList;
00037
00038 class InterruptibleBarrier : public Barrier
00039 {
00040 public:
00041 InterruptibleBarrier(unsigned int count);
00042 InterruptibleBarrier(Mutex *mutex, unsigned int count);
00043 virtual ~InterruptibleBarrier();
00044
00045 bool wait(unsigned int timeout_sec, unsigned int timeout_nanosec);
00046 virtual inline void wait() { wait(0, 0); }
00047
00048 void interrupt() throw();
00049 void reset() throw();
00050
00051 RefPtr<ThreadList> passed_threads();
00052
00053 private:
00054 InterruptibleBarrierData *__data;
00055 RefPtr<ThreadList> __passed_threads;
00056
00057 bool __interrupted;
00058 bool __timeout;
00059 };
00060
00061
00062 }
00063
00064 #endif