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";}
415 namespace TaskManagerHelper2 {
417 template <
class Ret,
class FType>
443 template <
class Ret,
class FType>
445 mutable FType functor;
451 template <
class FunctorArg>
465 typedef std::pair<std::unique_ptr<const Callback::Callback>,
466 std::unique_ptr<const Callback::Callback>> QueueItemType;
476 static unsigned int init_max_tasks();
658 static unsigned int max_tasks = init_max_tasks();
843 #ifdef CGU_USE_AUTO_PTR
844 add_task(std::auto_ptr<const Callback::Callback>(task),
845 std::auto_ptr<const Callback::Callback>());
847 add_task(std::unique_ptr<const Callback::Callback>(task),
848 std::unique_ptr<const Callback::Callback>());
926 #ifdef CGU_USE_AUTO_PTR
927 void add_task(std::auto_ptr<const Callback::Callback> task,
928 std::auto_ptr<const Callback::Callback> fail);
930 void add_task(std::unique_ptr<const Callback::Callback> task,
931 std::unique_ptr<const Callback::Callback> fail);
1005 template <
class Ret,
class... Params,
class... Args,
class T>
1007 Ret (T::*func)(Params...),
1143 template <
class Ret,
class... Params,
class... Args,
class T>
1144 #ifdef CGU_USE_AUTO_PTR
1147 std::auto_ptr<const Cgu::Callback::Callback> fail,
1150 GMainContext* context,
1152 Ret (T::*func)(Params...),
1157 std::unique_ptr<const Cgu::Callback::Callback> fail,
1160 GMainContext* context,
1162 Ret (T::*func)(Params...),
1255 template <
class Ret,
class... Params,
class... Args,
class T>
1256 #ifdef CGU_USE_AUTO_PTR
1258 GMainContext* context,
1260 Ret (T::*func)(Params...),
1262 static_assert(
sizeof...(Args) < 4,
1263 "No greater than three bound arguments can be passed to "
1264 "TaskManager::make_task_when() taking a member function.");
1268 std::auto_ptr<const Cgu::Callback::Callback>(),
1274 std::forward<Args>(args)...);
1278 GMainContext* context,
1280 Ret (T::*func)(Params...),
1282 static_assert(
sizeof...(Args) < 4,
1283 "No greater than three bound arguments can be passed to "
1284 "TaskManager::make_task_when() taking a member function.");
1288 std::unique_ptr<const Cgu::Callback::Callback>(),
1294 std::forward<Args>(args)...);
1351 template <
class Ret,
class... Params,
class... Args,
class T>
1353 Ret (T::*func)(Params...)
const,
1489 template <
class Ret,
class... Params,
class... Args,
class T>
1490 #ifdef CGU_USE_AUTO_PTR
1493 std::auto_ptr<const Cgu::Callback::Callback> fail,
1496 GMainContext* context,
1498 Ret (T::*func)(Params...)
const,
1503 std::unique_ptr<const Cgu::Callback::Callback> fail,
1506 GMainContext* context,
1508 Ret (T::*func)(Params...)
const,
1601 template <
class Ret,
class... Params,
class... Args,
class T>
1602 #ifdef CGU_USE_AUTO_PTR
1604 GMainContext* context,
1606 Ret (T::*func)(Params...)
const,
1608 static_assert(
sizeof...(Args) < 4,
1609 "No greater than three bound arguments can be passed to "
1610 "TaskManager::make_task_when() taking a member function.");
1614 std::auto_ptr<const Cgu::Callback::Callback>(),
1620 std::forward<Args>(args)...);
1624 GMainContext* context,
1626 Ret (T::*func)(Params...)
const,
1628 static_assert(
sizeof...(Args) < 4,
1629 "No greater than three bound arguments can be passed to "
1630 "TaskManager::make_task_when() taking a member function.");
1634 std::unique_ptr<const Cgu::Callback::Callback>(),
1640 std::forward<Args>(args)...);
1694 template <
class Ret,
class... Params,
class... Args>
1829 template <
class Ret,
class... Params,
class... Args>
1830 #ifdef CGU_USE_AUTO_PTR
1833 std::auto_ptr<const Cgu::Callback::Callback> fail,
1836 GMainContext* context,
1837 Ret (*func)(Params...),
1842 std::unique_ptr<const Cgu::Callback::Callback> fail,
1845 GMainContext* context,
1846 Ret (*func)(Params...),
1936 template <
class Ret,
class... Params,
class... Args>
1937 #ifdef CGU_USE_AUTO_PTR
1939 GMainContext* context,
1940 Ret (*func)(Params...),
1942 static_assert(
sizeof...(Args) < 5,
1943 "No greater than four bound arguments can be passed to "
1944 "TaskManager::make_task_when() taking a function.");
1948 std::auto_ptr<const Cgu::Callback::Callback>(),
1953 std::forward<Args>(args)...);
1956 GMainContext* context,
1957 Ret (*func)(Params...),
1959 static_assert(
sizeof...(Args) < 5,
1960 "No greater than four bound arguments can be passed to "
1961 "TaskManager::make_task_when() taking a function.");
1965 std::unique_ptr<const Cgu::Callback::Callback>(),
1970 std::forward<Args>(args)...);
2050 template <
class Ret,
class Func>
2056 #ifndef DOXYGEN_PARSING
2057 template <
class Func>
2076 typedef typename std::remove_const<typename std::remove_reference<Func>::type>::type FType;
2081 typedef decltype(f()) Ret;
2082 #ifdef CGU_USE_AUTO_PTR
2083 typedef std::auto_ptr<const Callback::Callback> CbPtr;
2085 typedef std::unique_ptr<const Callback::Callback> CbPtr;
2089 CbPtr exec_cb(
new TaskManagerHelper2::FunctorResultExec<Ret, FType>(std::forward<Func>(f), ret));
2090 CbPtr do_fail_cb(
Callback::make_ref(&TaskManagerHelper2::FunctorResultWrapper<Ret, FType>::do_fail,
2092 add_task(std::move(exec_cb), std::move(do_fail_cb));
2239 template <
class Ret,
class Func>
2240 #ifdef CGU_USE_AUTO_PTR
2243 std::auto_ptr<const Cgu::Callback::Callback> fail,
2246 GMainContext* context,
2251 std::unique_ptr<const Cgu::Callback::Callback> fail,
2254 GMainContext* context,
2355 template <
class Ret,
class Func>
2356 #ifdef CGU_USE_AUTO_PTR
2358 GMainContext* context,
2362 std::auto_ptr<const Cgu::Callback::Callback>(),
2366 std::forward<Func>(f));
2370 GMainContext* context,
2374 std::unique_ptr<const Cgu::Callback::Callback>(),
2378 std::forward<Func>(f));
2480 template <
class Ret,
class Func>
2481 #ifdef CGU_USE_AUTO_PTR
2483 GMainContext* context,
2487 std::auto_ptr<const Cgu::Callback::Callback>(),
2491 std::forward<Func>(f));
2495 GMainContext* context,
2499 std::unique_ptr<const Cgu::Callback::Callback>(),
2503 std::forward<Func>(f));
2552 TaskManager(
unsigned int max = 8,
unsigned int min = 0,
2553 unsigned int idle = 10000,
bool blocking =
true,
2695 #include <c++-gtk-utils/task_manager.tpp>
unsigned int get_min_threads() const
StopMode
Definition: task_manager.h:462
unsigned int get_tasks() const
void add_task(const Callback::Callback *task)
Definition: task_manager.h:842
void make_task_compose(Func &&f, GMainContext *context, std::unique_ptr< const Cgu::Callback::CallbackArg< const Ret & >> when)
Definition: task_manager.h:2494
A thread-pool class for managing tasks in multi-threaded programs.
Definition: task_manager.h:460
CallbackArg< FreeArgs...> * make_ref(T &t, void(T::*func)(FreeArgs...))
Definition: callback.h:1701
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:1623
This file provides thread-safe asynchronous queue classes.
static void exec(FType &f, const SharedLockPtr< AsyncResult< Ret >> &ret)
Definition: task_manager.h:419
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:1955
void dispatch() const
Definition: task_manager.h:448
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:423
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:2631
void make_task_when(std::unique_ptr< const Cgu::Callback::CallbackArg< const Ret & >> when, GMainContext *context, Func &&f)
Definition: task_manager.h:2369
This file provides classes for type erasure.
TaskManager & operator=(const TaskManager &)=delete
FunctorResultExec(FunctorArg &&functor_, const SharedLockPtr< AsyncResult< Ret >> &ret_)
Definition: task_manager.h:452
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:418
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:1277
static unsigned int get_max_tasks()
Definition: task_manager.h:651
Definition: task_manager.h:444
A thread-safe asynchronous result class.
Definition: async_result.h:165
IncHandle(TaskManager &tm_)
Definition: task_manager.h:2677
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:462
void change_max_threads(int delta)
void set_idle_time(unsigned int idle)
~IncHandle()
Definition: task_manager.h:2688
TaskManager(const TaskManager &)=delete
Definition: task_manager.h:462
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