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";}
370 namespace TaskManagerHelper {
372 template <
class Ret,
class FType>
398 template <
class Ret,
class FType>
400 mutable FType functor;
406 template <
class FunctorArg>
419 typedef std::pair<std::unique_ptr<const Callback::Callback>,
420 std::unique_ptr<const Callback::Callback>> QueueItemType;
429 void set_max_threads_impl(
unsigned int max);
732 #ifdef CGU_USE_AUTO_PTR
733 add_task(std::auto_ptr<const Callback::Callback>(task),
734 std::auto_ptr<const Callback::Callback>());
736 add_task(std::unique_ptr<const Callback::Callback>(task),
737 std::unique_ptr<const Callback::Callback>());
807 #ifdef CGU_USE_AUTO_PTR
808 void add_task(std::auto_ptr<const Callback::Callback> task,
809 std::auto_ptr<const Callback::Callback> fail);
811 void add_task(std::unique_ptr<const Callback::Callback> task,
812 std::unique_ptr<const Callback::Callback> fail);
878 template <
class Ret,
class... Params,
class... Args,
class T>
880 Ret (T::*func)(Params...),
999 template <
class Ret,
class... Params,
class... Args,
class T>
1000 #ifdef CGU_USE_AUTO_PTR
1003 std::auto_ptr<const Cgu::Callback::Callback> fail,
1006 GMainContext* context,
1008 Ret (T::*func)(Params...),
1013 std::unique_ptr<const Cgu::Callback::Callback> fail,
1016 GMainContext* context,
1018 Ret (T::*func)(Params...),
1088 template <
class Ret,
class... Params,
class... Args,
class T>
1089 #ifdef CGU_USE_AUTO_PTR
1091 GMainContext* context,
1093 Ret (T::*func)(Params...),
1095 static_assert(
sizeof...(Args) < 4,
1096 "No greater than three bound arguments can be passed to "
1097 "TaskManager::make_task_when() taking a member function.");
1101 std::auto_ptr<const Cgu::Callback::Callback>(),
1107 std::forward<Args>(args)...);
1111 GMainContext* context,
1113 Ret (T::*func)(Params...),
1115 static_assert(
sizeof...(Args) < 4,
1116 "No greater than three bound arguments can be passed to "
1117 "TaskManager::make_task_when() taking a member function.");
1121 std::unique_ptr<const Cgu::Callback::Callback>(),
1127 std::forward<Args>(args)...);
1176 template <
class Ret,
class... Params,
class... Args,
class T>
1178 Ret (T::*func)(Params...)
const,
1297 template <
class Ret,
class... Params,
class... Args,
class T>
1298 #ifdef CGU_USE_AUTO_PTR
1301 std::auto_ptr<const Cgu::Callback::Callback> fail,
1304 GMainContext* context,
1306 Ret (T::*func)(Params...)
const,
1311 std::unique_ptr<const Cgu::Callback::Callback> fail,
1314 GMainContext* context,
1316 Ret (T::*func)(Params...)
const,
1386 template <
class Ret,
class... Params,
class... Args,
class T>
1387 #ifdef CGU_USE_AUTO_PTR
1389 GMainContext* context,
1391 Ret (T::*func)(Params...)
const,
1393 static_assert(
sizeof...(Args) < 4,
1394 "No greater than three bound arguments can be passed to "
1395 "TaskManager::make_task_when() taking a member function.");
1399 std::auto_ptr<const Cgu::Callback::Callback>(),
1405 std::forward<Args>(args)...);
1409 GMainContext* context,
1411 Ret (T::*func)(Params...)
const,
1413 static_assert(
sizeof...(Args) < 4,
1414 "No greater than three bound arguments can be passed to "
1415 "TaskManager::make_task_when() taking a member function.");
1419 std::unique_ptr<const Cgu::Callback::Callback>(),
1425 std::forward<Args>(args)...);
1471 template <
class Ret,
class... Params,
class... Args>
1588 template <
class Ret,
class... Params,
class... Args>
1589 #ifdef CGU_USE_AUTO_PTR
1592 std::auto_ptr<const Cgu::Callback::Callback> fail,
1595 GMainContext* context,
1596 Ret (*func)(Params...),
1601 std::unique_ptr<const Cgu::Callback::Callback> fail,
1604 GMainContext* context,
1605 Ret (*func)(Params...),
1672 template <
class Ret,
class... Params,
class... Args>
1673 #ifdef CGU_USE_AUTO_PTR
1675 GMainContext* context,
1676 Ret (*func)(Params...),
1678 static_assert(
sizeof...(Args) < 5,
1679 "No greater than four bound arguments can be passed to "
1680 "TaskManager::make_task_when() taking a function.");
1684 std::auto_ptr<const Cgu::Callback::Callback>(),
1689 std::forward<Args>(args)...);
1692 GMainContext* context,
1693 Ret (*func)(Params...),
1695 static_assert(
sizeof...(Args) < 5,
1696 "No greater than four bound arguments can be passed to "
1697 "TaskManager::make_task_when() taking a function.");
1701 std::unique_ptr<const Cgu::Callback::Callback>(),
1706 std::forward<Args>(args)...);
1778 template <
class Ret,
class Func>
1784 #ifndef DOXYGEN_PARSING
1785 template <
class Func>
1804 typedef typename std::remove_const<typename std::remove_reference<Func>::type>::type FType;
1805 typedef decltype(f()) Ret;
1806 #ifdef CGU_USE_AUTO_PTR
1807 typedef std::auto_ptr<const Callback::Callback> CbPtr;
1809 typedef std::unique_ptr<const Callback::Callback> CbPtr;
1813 CbPtr exec_cb(
new TaskManagerHelper::FunctorResultExec<Ret, FType>(std::forward<Func>(f), ret));
1814 CbPtr do_fail_cb(
Callback::make_ref(&TaskManagerHelper::FunctorResultWrapper<Ret, FType>::do_fail,
1816 add_task(std::move(exec_cb), std::move(do_fail_cb));
1945 template <
class Ret,
class Func>
1946 #ifdef CGU_USE_AUTO_PTR
1949 std::auto_ptr<const Cgu::Callback::Callback> fail,
1952 GMainContext* context,
1957 std::unique_ptr<const Cgu::Callback::Callback> fail,
1960 GMainContext* context,
2041 template <
class Ret,
class Func>
2042 #ifdef CGU_USE_AUTO_PTR
2044 GMainContext* context,
2048 std::auto_ptr<const Cgu::Callback::Callback>(),
2052 std::forward<Func>(f));
2056 GMainContext* context,
2060 std::unique_ptr<const Cgu::Callback::Callback>(),
2064 std::forward<Func>(f));
2147 template <
class Ret,
class Func>
2148 #ifdef CGU_USE_AUTO_PTR
2150 GMainContext* context,
2154 std::auto_ptr<const Cgu::Callback::Callback>(),
2158 std::forward<Func>(f));
2162 GMainContext* context,
2166 std::unique_ptr<const Cgu::Callback::Callback>(),
2170 std::forward<Func>(f));
2219 TaskManager(
unsigned int max = 8,
unsigned int min = 0,
2220 unsigned int idle = 10000,
bool blocking =
true,
2282 #include <c++-gtk-utils/task_manager.tpp>