15 #include <boost/function.hpp>
16 #include <boost/shared_ptr.hpp>
17 #include <boost/noncopyable.hpp>
19 #include <tbb/mutex.h>
20 #include <tbb/tbb_thread.h>
21 #include <tbb/compat/condition_variable>
22 #include <tbb/spin_mutex.h>
23 #include <tbb/atomic.h>
36 typedef boost::shared_ptr<ThreadInfo>
Ptr;
37 typedef std::list<Ptr>
List;
58 typedef boost::shared_ptr<CallbackInterface>
Ptr;
67 virtual std::string label()
const;
70 virtual void run() = 0;
73 virtual void cancel();
76 virtual bool valid()
const;
82 const std::string& label,
89 virtual std::string label()
const;
92 static void cleanup();
95 virtual void setWarnTime(
double seconds);
96 virtual void setWarnTime(
double seconds, std::ostream& output);
99 virtual void printInfo(std::ostream&,
size_t width=0)
const;
102 virtual size_t totalNumberOfCallbacks()
const;
105 virtual unsigned size()
const;
108 virtual size_t numExecuting()
const;
111 virtual unsigned maxTasks()
const;
115 virtual void setMaxTasks(
unsigned tasks,
bool wait=
true);
120 void shutdown(
bool wait =
true);
123 virtual void clear(
bool wait =
true);
126 virtual void add_back(
const Callback&,
const std::string& label =
"");
129 virtual void add_front(
const Callback&,
const std::string& label =
"");
155 virtual bool runOne(
bool block=
false,
ThreadInfo* info=0);
160 virtual void runAll(
bool useThisThread=
false);
176 typedef std::list<Record>
List;
187 typedef tbb::interface5::unique_lock<Mutex>
Lock;
205 typedef std::multimap<double, std::ostream*, std::greater<double> >
StreamMap;