00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __TBB_task_scheduler_observer_H
00022 #define __TBB_task_scheduler_observer_H
00023
00024 #include "atomic.h"
00025
00026 #if __TBB_SCHEDULER_OBSERVER
00027
00028 namespace tbb {
00029
00030 namespace internal {
00031
00032 class observer_proxy;
00033
00034 class task_scheduler_observer_v3 {
00035 friend class observer_proxy;
00036 observer_proxy* my_proxy;
00037 atomic<intptr> my_busy_count;
00038 public:
00040 void __TBB_EXPORTED_METHOD observe( bool state=true );
00041
00043 bool is_observing() const {return my_proxy!=NULL;}
00044
00046 task_scheduler_observer_v3() : my_proxy(NULL) {my_busy_count=0;}
00047
00049 virtual void on_scheduler_entry( bool ) {}
00050
00052 virtual void on_scheduler_exit( bool ) {}
00053
00055 virtual ~task_scheduler_observer_v3() {observe(false);}
00056 };
00057
00058 }
00059
00060 typedef internal::task_scheduler_observer_v3 task_scheduler_observer;
00061
00062 }
00063
00064 #endif
00065
00066 #endif