00001
00002
00003
00004
00005
00006
00007 #ifndef _SAGA_TASK_CONTAINER_HPP
00008 #define _SAGA_TASK_CONTAINER_HPP
00009
00010
00011 #include <vector>
00012
00013
00014 #include <saga/saga/base.hpp>
00015 #include <saga/saga/task.hpp>
00016
00017 #include <saga/saga/detail/monitorable.hpp>
00018
00019
00020 #if defined(BOOST_MSVC)
00021 #pragma warning(push)
00022 #pragma warning(disable: 4251 4231 4275 4660)
00023 #endif
00024
00026 namespace saga
00027 {
00034 class SAGA_EXPORT task_container
00035 : public saga::object,
00036 public saga::detail::monitorable<task_container>
00037 {
00038 private:
00040
00041 TR1::shared_ptr <saga::impl::task_container> get_impl (void) const;
00042
00043 friend struct impl::runtime;
00044 friend struct saga::detail::monitorable <task_container>;
00046
00047 public:
00051 enum wait_mode
00052 {
00053 All = 1,
00054
00055 Any = 2
00056
00057 };
00058
00063 task_container (void);
00064
00069 ~task_container (void);
00070
00075 void run ();
00076
00083 void add_task (task t);
00084
00091 void remove_task (task t);
00092
00098 std::vector <task> list_tasks (void) const;
00099
00105 std::vector <task_base::state> get_states (void) const;
00106
00112 void cancel (void);
00113
00119 std::vector <task> wait (wait_mode mode = All, float timeout = -1.0);
00120 };
00121
00123 }
00124
00125
00126 #if defined(BOOST_MSVC)
00127 #pragma warning(pop)
00128 #endif
00129
00130 #endif // _SAGA_TASK_CONTAINER_HPP
00131