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";}
374 namespace TaskManagerHelper {
376 template <
class Ret,
class FType>
402 template <
class Ret,
class FType>
404 mutable FType functor;
410 template <
class FunctorArg>
423 typedef std::pair<std::unique_ptr<const Callback::Callback>,
424 std::unique_ptr<const Callback::Callback>> QueueItemType;
433 void set_max_threads_impl(
unsigned int max);
736 #ifdef CGU_USE_AUTO_PTR
737 add_task(std::auto_ptr<const Callback::Callback>(task),
738 std::auto_ptr<const Callback::Callback>());
740 add_task(std::unique_ptr<const Callback::Callback>(task),
741 std::unique_ptr<const Callback::Callback>());
811 #ifdef CGU_USE_AUTO_PTR
812 void add_task(std::auto_ptr<const Callback::Callback> task,
813 std::auto_ptr<const Callback::Callback> fail);
815 void add_task(std::unique_ptr<const Callback::Callback> task,
816 std::unique_ptr<const Callback::Callback> fail);
882 template <
class Ret,
class... Params,
class... Args,
class T>
884 Ret (T::*func)(Params...),
1003 template <
class Ret,
class... Params,
class... Args,
class T>
1004 #ifdef CGU_USE_AUTO_PTR
1007 std::auto_ptr<const Cgu::Callback::Callback> fail,
1010 GMainContext* context,
1012 Ret (T::*func)(Params...),
1017 std::unique_ptr<const Cgu::Callback::Callback> fail,
1020 GMainContext* context,
1022 Ret (T::*func)(Params...),
1092 template <
class Ret,
class... Params,
class... Args,
class T>
1093 #ifdef CGU_USE_AUTO_PTR
1095 GMainContext* context,
1097 Ret (T::*func)(Params...),
1099 static_assert(
sizeof...(Args) < 4,
1100 "No greater than three bound arguments can be passed to "
1101 "TaskManager::make_task_when() taking a member function.");
1105 std::auto_ptr<const Cgu::Callback::Callback>(),
1111 std::forward<Args>(args)...);
1115 GMainContext* context,
1117 Ret (T::*func)(Params...),
1119 static_assert(
sizeof...(Args) < 4,
1120 "No greater than three bound arguments can be passed to "
1121 "TaskManager::make_task_when() taking a member function.");
1125 std::unique_ptr<const Cgu::Callback::Callback>(),
1131 std::forward<Args>(args)...);
1180 template <
class Ret,
class... Params,
class... Args,
class T>
1182 Ret (T::*func)(Params...)
const,
1301 template <
class Ret,
class... Params,
class... Args,
class T>
1302 #ifdef CGU_USE_AUTO_PTR
1305 std::auto_ptr<const Cgu::Callback::Callback> fail,
1308 GMainContext* context,
1310 Ret (T::*func)(Params...)
const,
1315 std::unique_ptr<const Cgu::Callback::Callback> fail,
1318 GMainContext* context,
1320 Ret (T::*func)(Params...)
const,
1390 template <
class Ret,
class... Params,
class... Args,
class T>
1391 #ifdef CGU_USE_AUTO_PTR
1393 GMainContext* context,
1395 Ret (T::*func)(Params...)
const,
1397 static_assert(
sizeof...(Args) < 4,
1398 "No greater than three bound arguments can be passed to "
1399 "TaskManager::make_task_when() taking a member function.");
1403 std::auto_ptr<const Cgu::Callback::Callback>(),
1409 std::forward<Args>(args)...);
1413 GMainContext* context,
1415 Ret (T::*func)(Params...)
const,
1417 static_assert(
sizeof...(Args) < 4,
1418 "No greater than three bound arguments can be passed to "
1419 "TaskManager::make_task_when() taking a member function.");
1423 std::unique_ptr<const Cgu::Callback::Callback>(),
1429 std::forward<Args>(args)...);
1475 template <
class Ret,
class... Params,
class... Args>
1592 template <
class Ret,
class... Params,
class... Args>
1593 #ifdef CGU_USE_AUTO_PTR
1596 std::auto_ptr<const Cgu::Callback::Callback> fail,
1599 GMainContext* context,
1600 Ret (*func)(Params...),
1605 std::unique_ptr<const Cgu::Callback::Callback> fail,
1608 GMainContext* context,
1609 Ret (*func)(Params...),
1676 template <
class Ret,
class... Params,
class... Args>
1677 #ifdef CGU_USE_AUTO_PTR
1679 GMainContext* context,
1680 Ret (*func)(Params...),
1682 static_assert(
sizeof...(Args) < 5,
1683 "No greater than four bound arguments can be passed to "
1684 "TaskManager::make_task_when() taking a function.");
1688 std::auto_ptr<const Cgu::Callback::Callback>(),
1693 std::forward<Args>(args)...);
1696 GMainContext* context,
1697 Ret (*func)(Params...),
1699 static_assert(
sizeof...(Args) < 5,
1700 "No greater than four bound arguments can be passed to "
1701 "TaskManager::make_task_when() taking a function.");
1705 std::unique_ptr<const Cgu::Callback::Callback>(),
1710 std::forward<Args>(args)...);
1782 template <
class Ret,
class Func>
1788 #ifndef DOXYGEN_PARSING
1789 template <
class Func>
1808 typedef typename std::remove_const<typename std::remove_reference<Func>::type>::type FType;
1809 typedef decltype(f()) Ret;
1810 #ifdef CGU_USE_AUTO_PTR
1811 typedef std::auto_ptr<const Callback::Callback> CbPtr;
1813 typedef std::unique_ptr<const Callback::Callback> CbPtr;
1817 CbPtr exec_cb(
new TaskManagerHelper::FunctorResultExec<Ret, FType>(std::forward<Func>(f), ret));
1818 CbPtr do_fail_cb(
Callback::make_ref(&TaskManagerHelper::FunctorResultWrapper<Ret, FType>::do_fail,
1820 add_task(std::move(exec_cb), std::move(do_fail_cb));
1949 template <
class Ret,
class Func>
1950 #ifdef CGU_USE_AUTO_PTR
1953 std::auto_ptr<const Cgu::Callback::Callback> fail,
1956 GMainContext* context,
1961 std::unique_ptr<const Cgu::Callback::Callback> fail,
1964 GMainContext* context,
2045 template <
class Ret,
class Func>
2046 #ifdef CGU_USE_AUTO_PTR
2048 GMainContext* context,
2052 std::auto_ptr<const Cgu::Callback::Callback>(),
2056 std::forward<Func>(f));
2060 GMainContext* context,
2064 std::unique_ptr<const Cgu::Callback::Callback>(),
2068 std::forward<Func>(f));
2151 template <
class Ret,
class Func>
2152 #ifdef CGU_USE_AUTO_PTR
2154 GMainContext* context,
2158 std::auto_ptr<const Cgu::Callback::Callback>(),
2162 std::forward<Func>(f));
2166 GMainContext* context,
2170 std::unique_ptr<const Cgu::Callback::Callback>(),
2174 std::forward<Func>(f));
2223 TaskManager(
unsigned int max = 8,
unsigned int min = 0,
2224 unsigned int idle = 10000,
bool blocking =
true,
2286 #include <c++-gtk-utils/task_manager.tpp>