39 #ifndef CGU_TASK_MANAGER_H
40 #define CGU_TASK_MANAGER_H
46 #include <type_traits>
62 virtual const char*
what()
const throw() {
return "TaskError\n";}
356 namespace TaskManagerHelper2 {
358 template <
class Ret,
class FType>
384 template <
class Ret,
class FType>
386 mutable FType functor;
392 template <
class FunctorArg>
406 typedef std::pair<std::unique_ptr<const Callback::Callback>,
407 std::unique_ptr<const Callback::Callback>> QueueItemType;
744 #ifdef CGU_USE_AUTO_PTR
745 add_task(std::auto_ptr<const Callback::Callback>(task),
746 std::auto_ptr<const Callback::Callback>());
748 add_task(std::unique_ptr<const Callback::Callback>(task),
749 std::unique_ptr<const Callback::Callback>());
825 #ifdef CGU_USE_AUTO_PTR
826 void add_task(std::auto_ptr<const Callback::Callback> task,
827 std::auto_ptr<const Callback::Callback> fail);
829 void add_task(std::unique_ptr<const Callback::Callback> task,
830 std::unique_ptr<const Callback::Callback> fail);
902 template <
class Ret,
class... Params,
class... Args,
class T>
904 Ret (T::*func)(Params...),
1038 template <
class Ret,
class... Params,
class... Args,
class T>
1039 #ifdef CGU_USE_AUTO_PTR
1042 std::auto_ptr<const Cgu::Callback::Callback> fail,
1045 GMainContext* context,
1047 Ret (T::*func)(Params...),
1052 std::unique_ptr<const Cgu::Callback::Callback> fail,
1055 GMainContext* context,
1057 Ret (T::*func)(Params...),
1148 template <
class Ret,
class... Params,
class... Args,
class T>
1149 #ifdef CGU_USE_AUTO_PTR
1151 GMainContext* context,
1153 Ret (T::*func)(Params...),
1155 static_assert(
sizeof...(Args) < 4,
1156 "No greater than three bound arguments can be passed to "
1157 "TaskManager::make_task_when() taking a member function.");
1161 std::auto_ptr<const Cgu::Callback::Callback>(),
1167 std::forward<Args>(args)...);
1171 GMainContext* context,
1173 Ret (T::*func)(Params...),
1175 static_assert(
sizeof...(Args) < 4,
1176 "No greater than three bound arguments can be passed to "
1177 "TaskManager::make_task_when() taking a member function.");
1181 std::unique_ptr<const Cgu::Callback::Callback>(),
1187 std::forward<Args>(args)...);
1242 template <
class Ret,
class... Params,
class... Args,
class T>
1244 Ret (T::*func)(Params...)
const,
1378 template <
class Ret,
class... Params,
class... Args,
class T>
1379 #ifdef CGU_USE_AUTO_PTR
1382 std::auto_ptr<const Cgu::Callback::Callback> fail,
1385 GMainContext* context,
1387 Ret (T::*func)(Params...)
const,
1392 std::unique_ptr<const Cgu::Callback::Callback> fail,
1395 GMainContext* context,
1397 Ret (T::*func)(Params...)
const,
1488 template <
class Ret,
class... Params,
class... Args,
class T>
1489 #ifdef CGU_USE_AUTO_PTR
1491 GMainContext* context,
1493 Ret (T::*func)(Params...)
const,
1495 static_assert(
sizeof...(Args) < 4,
1496 "No greater than three bound arguments can be passed to "
1497 "TaskManager::make_task_when() taking a member function.");
1501 std::auto_ptr<const Cgu::Callback::Callback>(),
1507 std::forward<Args>(args)...);
1511 GMainContext* context,
1513 Ret (T::*func)(Params...)
const,
1515 static_assert(
sizeof...(Args) < 4,
1516 "No greater than three bound arguments can be passed to "
1517 "TaskManager::make_task_when() taking a member function.");
1521 std::unique_ptr<const Cgu::Callback::Callback>(),
1527 std::forward<Args>(args)...);
1579 template <
class Ret,
class... Params,
class... Args>
1711 template <
class Ret,
class... Params,
class... Args>
1712 #ifdef CGU_USE_AUTO_PTR
1715 std::auto_ptr<const Cgu::Callback::Callback> fail,
1718 GMainContext* context,
1719 Ret (*func)(Params...),
1724 std::unique_ptr<const Cgu::Callback::Callback> fail,
1727 GMainContext* context,
1728 Ret (*func)(Params...),
1816 template <
class Ret,
class... Params,
class... Args>
1817 #ifdef CGU_USE_AUTO_PTR
1819 GMainContext* context,
1820 Ret (*func)(Params...),
1822 static_assert(
sizeof...(Args) < 5,
1823 "No greater than four bound arguments can be passed to "
1824 "TaskManager::make_task_when() taking a function.");
1828 std::auto_ptr<const Cgu::Callback::Callback>(),
1833 std::forward<Args>(args)...);
1836 GMainContext* context,
1837 Ret (*func)(Params...),
1839 static_assert(
sizeof...(Args) < 5,
1840 "No greater than four bound arguments can be passed to "
1841 "TaskManager::make_task_when() taking a function.");
1845 std::unique_ptr<const Cgu::Callback::Callback>(),
1850 std::forward<Args>(args)...);
1928 template <
class Ret,
class Func>
1934 #ifndef DOXYGEN_PARSING
1935 template <
class Func>
1954 typedef typename std::remove_const<typename std::remove_reference<Func>::type>::type FType;
1959 typedef decltype(f()) Ret;
1960 #ifdef CGU_USE_AUTO_PTR
1961 typedef std::auto_ptr<const Callback::Callback> CbPtr;
1963 typedef std::unique_ptr<const Callback::Callback> CbPtr;
1967 CbPtr exec_cb(
new TaskManagerHelper2::FunctorResultExec<Ret, FType>(std::forward<Func>(f), ret));
1968 CbPtr do_fail_cb(
Callback::make_ref(&TaskManagerHelper2::FunctorResultWrapper<Ret, FType>::do_fail,
1970 add_task(std::move(exec_cb), std::move(do_fail_cb));
2115 template <
class Ret,
class Func>
2116 #ifdef CGU_USE_AUTO_PTR
2119 std::auto_ptr<const Cgu::Callback::Callback> fail,
2122 GMainContext* context,
2127 std::unique_ptr<const Cgu::Callback::Callback> fail,
2130 GMainContext* context,
2229 template <
class Ret,
class Func>
2230 #ifdef CGU_USE_AUTO_PTR
2232 GMainContext* context,
2236 std::auto_ptr<const Cgu::Callback::Callback>(),
2240 std::forward<Func>(f));
2244 GMainContext* context,
2248 std::unique_ptr<const Cgu::Callback::Callback>(),
2252 std::forward<Func>(f));
2352 template <
class Ret,
class Func>
2353 #ifdef CGU_USE_AUTO_PTR
2355 GMainContext* context,
2359 std::auto_ptr<const Cgu::Callback::Callback>(),
2363 std::forward<Func>(f));
2367 GMainContext* context,
2371 std::unique_ptr<const Cgu::Callback::Callback>(),
2375 std::forward<Func>(f));
2424 TaskManager(
unsigned int max = 8,
unsigned int min = 0,
2425 unsigned int idle = 10000,
bool blocking =
true,
2567 #include <c++-gtk-utils/task_manager.tpp>
unsigned int get_min_threads() const
StopMode
Definition: task_manager.h:403
unsigned int get_tasks() const
void add_task(const Callback::Callback *task)
Definition: task_manager.h:743
void make_task_compose(Func &&f, GMainContext *context, std::unique_ptr< const Cgu::Callback::CallbackArg< const Ret & >> when)
Definition: task_manager.h:2366
A thread-pool class for managing tasks in multi-threaded programs.
Definition: task_manager.h:401
CallbackArg< FreeArgs...> * make_ref(T &t, void(T::*func)(FreeArgs...))
Definition: callback.h:1695
Definition: task_manager.h:61
virtual const char * what() const
Definition: task_manager.h:62
void make_task_when(std::unique_ptr< const Cgu::Callback::CallbackArg< const Ret & >> when, GMainContext *context, const T &t, Ret(T::*func)(Params...) const, Args &&...args)
Definition: task_manager.h:1510
This file provides thread-safe asynchronous queue classes.
static void exec(FType &f, const SharedLockPtr< AsyncResult< Ret >> &ret)
Definition: task_manager.h:360
void make_task_when(std::unique_ptr< const Cgu::Callback::CallbackArg< const Ret & >> when, GMainContext *context, Ret(*func)(Params...), Args &&...args)
Definition: task_manager.h:1835
void dispatch() const
Definition: task_manager.h:389
This is a smart pointer for managing the lifetime of objects allocated on freestore, with a thread safe reference count.
Definition: shared_ptr.h:644
static void do_fail(const SharedLockPtr< AsyncResult< Ret >> &ret)
Definition: task_manager.h:364
void set_max_threads(unsigned int max)
Cgu::SharedLockPtr< Cgu::AsyncResult< Ret > > make_task_result(T &t, Ret(T::*func)(Params...), Args &&...args)
void set_blocking(bool blocking)
unsigned int get_idle_time() const
A scoped handle for exception safe incrementing of the maximum number of threads that a TaskManager o...
Definition: task_manager.h:2503
void make_task_when(std::unique_ptr< const Cgu::Callback::CallbackArg< const Ret & >> when, GMainContext *context, Func &&f)
Definition: task_manager.h:2243
This file provides classes for type erasure.
TaskManager & operator=(const TaskManager &)=delete
FunctorResultExec(FunctorArg &&functor_, const SharedLockPtr< AsyncResult< Ret >> &ret_)
Definition: task_manager.h:393
void make_task_when_full(std::unique_ptr< const Cgu::Callback::CallbackArg< const Ret & >> when, Cgu::Releaser *when_releaser, std::unique_ptr< const Cgu::Callback::Callback > fail, Cgu::Releaser *fail_releaser, gint priority, GMainContext *context, T &t, Ret(T::*func)(Params...), Args &&...args)
Definition: task_manager.h:359
void make_task_when(std::unique_ptr< const Cgu::Callback::CallbackArg< const Ret & >> when, GMainContext *context, T &t, Ret(T::*func)(Params...), Args &&...args)
Definition: task_manager.h:1170
Definition: task_manager.h:385
A thread-safe asynchronous result class.
Definition: async_result.h:165
IncHandle(TaskManager &tm_)
Definition: task_manager.h:2549
void set_stop_mode(StopMode mode)
unsigned int get_max_threads() const
unsigned int get_used_threads() const
This file provides a thread-safe signal/slot mechanism, with automatic disconnection.
Provides wrapper classes for pthread mutexes and condition variables, and scoped locking classes for ...
Definition: application.h:44
StopMode get_stop_mode() const
A scoped locking class for exception safe Mutex locking which tracks the status of its mutex...
Definition: mutex.h:331
This file provides a thread-safe asynchronous result class.
Definition: task_manager.h:403
void change_max_threads(int delta)
void set_idle_time(unsigned int idle)
~IncHandle()
Definition: task_manager.h:2560
TaskManager(const TaskManager &)=delete
Definition: task_manager.h:403
bool get_blocking() const
The callback interface class.
Definition: callback.h:522
#define CGU_GLIB_MEMORY_SLICES_FUNCS
Definition: cgu_config.h:84
A class used for tracking EmitterArg and SafeEmitterArg connections.
Definition: emitter.h:333