Shadowrun: Awakened 29 September 2011 - Build 871
task_scheduler_observer.h
Go to the documentation of this file.
00001 /*
00002     Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
00003 
00004     This file is part of Threading Building Blocks.
00005 
00006     Threading Building Blocks is free software; you can redistribute it
00007     and/or modify it under the terms of the GNU General Public License
00008     version 2 as published by the Free Software Foundation.
00009 
00010     Threading Building Blocks is distributed in the hope that it will be
00011     useful, but WITHOUT ANY WARRANTY; without even the implied warranty
00012     of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013     GNU General Public License for more details.
00014 
00015     You should have received a copy of the GNU General Public License
00016     along with Threading Building Blocks; if not, write to the Free Software
00017     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
00018 
00019     As a special exception, you may use this file as part of a free software
00020     library without restriction.  Specifically, if other files instantiate
00021     templates or use macros or inline functions from this file, or you compile
00022     this file and link it with other files to produce an executable, this
00023     file does not by itself cause the resulting executable to be covered by
00024     the GNU General Public License.  This exception does not however
00025     invalidate any other reasons why the executable file might be covered by
00026     the GNU General Public License.
00027 */
00028 
00029 #ifndef __TBB_task_scheduler_observer_H
00030 #define __TBB_task_scheduler_observer_H
00031 
00032 #include "atomic.h"
00033 
00034 #if __TBB_SCHEDULER_OBSERVER
00035 
00036 namespace tbb {
00037 
00038 namespace internal {
00039 
00040 class observer_proxy;
00041 
00042 class task_scheduler_observer_v3 {
00043     friend class observer_proxy;
00044     observer_proxy* my_proxy;
00045     atomic<intptr_t> my_busy_count;
00046 public:
00048     void __TBB_EXPORTED_METHOD observe( bool state=true );
00049 
00051     bool is_observing() const {return my_proxy!=NULL;}
00052 
00054     task_scheduler_observer_v3() : my_proxy(NULL) {my_busy_count=0;}
00055 
00057     virtual void on_scheduler_entry( bool /*is_worker*/ ) {} 
00058 
00060     virtual void on_scheduler_exit( bool /*is_worker*/ ) {}
00061 
00063     virtual ~task_scheduler_observer_v3() {observe(false);}
00064 };
00065 
00066 } // namespace internal
00067 
00068 typedef internal::task_scheduler_observer_v3 task_scheduler_observer;
00069 
00070 } // namespace tbb
00071 
00072 #endif /* __TBB_SCHEDULER_OBSERVER */
00073 
00074 #endif /* __TBB_task_scheduler_observer_H */

Copyright © 2007-2010 by The Shadowrun: Awakened Team. This work is licensed under the GNU Lesser General Public License 3.

GNU Lesser General Public License 3 Sourceforge.net