libcopp  2.2.0
Data Structures | Public Types | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
task_manager< task< TCO_MACRO > > Class Template Reference

task manager for stackful coroutine task More...

#include <task_manager.h>

Collaboration diagram for task_manager< task< TCO_MACRO > >:
Collaboration graph

Data Structures

struct  flag_guard_type
 
struct  flag_type
 

Public Types

using task_type = task< TCO_MACRO >
 
using container_type = std::unordered_map< typename task_type::id_type, detail::task_manager_node< task_type > >
 
using id_type = typename task_type::id_type
 
using task_ptr_type = typename task_type::ptr_type
 
using self_type = task_manager< task_type >
 
using ptr_type = std::shared_ptr< self_type >
 
using id_t = id_type
 
using self_t = self_type
 
using task_t = task_type
 
using task_ptr_t = task_ptr_type
 
using ptr_t = ptr_type
 
using container_t = container_type
 
using flag_t = flag_type
 

Public Member Functions

 task_manager ()
 
 ~task_manager ()
 
void reset ()
 
int add_task (const task_ptr_type &task, time_t timeout_sec, int timeout_nsec)
 add task to manager please make the task has method of get_id() and will return a unique id More...
 
int add_task (const task_ptr_type &task)
 add task to manager please make the task has method of get_id() and will return a unique id More...
 
int set_timeout (id_type id, time_t timeout_sec, int timeout_nsec)
 set or update task timeout More...
 
int remove_task (id_type id, const task_ptr_type &confirm_ptr)
 remove task in this manager More...
 
int remove_task (id_type id)
 remove task in this manager More...
 
int remove_task (id_type id, const task_type *confirm_ptr)
 remove task in this manager More...
 
task_ptr_type find_task (id_type id)
 find task by id More...
 
int start (id_type id, void *priv_data=nullptr)
 
int resume (id_type id, void *priv_data=nullptr)
 
int cancel (id_type id, void *priv_data=nullptr)
 
int kill (id_type id, enum EN_TASK_STATUS status, void *priv_data=nullptr)
 
int kill (id_type id, void *priv_data=nullptr)
 
int tick (time_t sec, int nsec=0)
 active tick event and deal with clock More...
 
size_t get_tick_checkpoint_size () const LIBCOPP_MACRO_NOEXCEPT
 get timeout checkpoint number in this manager More...
 
size_t get_task_size () const LIBCOPP_MACRO_NOEXCEPT
 get task number in this manager More...
 
detail::tickspec_t get_last_tick_time () const LIBCOPP_MACRO_NOEXCEPT
 get last tick time More...
 
const container_typeget_container () const LIBCOPP_MACRO_NOEXCEPT
 task container, this api is just used for provide information to users More...
 
const std::set< detail::task_timer_node< id_type > > & get_checkpoints () const LIBCOPP_MACRO_NOEXCEPT
 get all task checkpoints, this api is just used for provide information to users More...
 

Static Public Member Functions

static ptr_type create ()
 create a new task manager More...
 

Private Member Functions

void set_timeout_timer (detail::task_manager_node< task_type > &node, time_t timeout_sec, int timeout_nsec)
 
void remove_timeout_timer (detail::task_manager_node< task_type > &node)
 

Private Attributes

container_type tasks_
 
detail::tickspec_t last_tick_time_
 
std::set< detail::task_timer_node< id_type > > task_timeout_timer_
 
LIBCOPP_COPP_NAMESPACE_ID::util::lock::spin_lock action_lock_
 
int flags_
 

Detailed Description

template<typename TCO_MACRO>
class task_manager< task< TCO_MACRO > >

task manager for stackful coroutine task

Definition at line 159 of file task_manager.h.

Member Typedef Documentation

◆ container_t

template<typename TCO_MACRO >
using task_manager< task< TCO_MACRO > >::container_t = container_type

Definition at line 182 of file task_manager.h.

◆ container_type

template<typename TCO_MACRO >
using task_manager< task< TCO_MACRO > >::container_type = std::unordered_map<typename task_type::id_type, detail::task_manager_node<task_type> >

Definition at line 162 of file task_manager.h.

◆ flag_t

template<typename TCO_MACRO >
using task_manager< task< TCO_MACRO > >::flag_t = flag_type

Definition at line 183 of file task_manager.h.

◆ id_t

template<typename TCO_MACRO >
using task_manager< task< TCO_MACRO > >::id_t = id_type

Definition at line 177 of file task_manager.h.

◆ id_type

template<typename TCO_MACRO >
using task_manager< task< TCO_MACRO > >::id_type = typename task_type::id_type

Definition at line 163 of file task_manager.h.

◆ ptr_t

template<typename TCO_MACRO >
using task_manager< task< TCO_MACRO > >::ptr_t = ptr_type

Definition at line 181 of file task_manager.h.

◆ ptr_type

template<typename TCO_MACRO >
using task_manager< task< TCO_MACRO > >::ptr_type = std::shared_ptr<self_type>

Definition at line 166 of file task_manager.h.

◆ self_t

template<typename TCO_MACRO >
using task_manager< task< TCO_MACRO > >::self_t = self_type

Definition at line 178 of file task_manager.h.

◆ self_type

template<typename TCO_MACRO >
using task_manager< task< TCO_MACRO > >::self_type = task_manager<task_type>

Definition at line 165 of file task_manager.h.

◆ task_ptr_t

template<typename TCO_MACRO >
using task_manager< task< TCO_MACRO > >::task_ptr_t = task_ptr_type

Definition at line 180 of file task_manager.h.

◆ task_ptr_type

template<typename TCO_MACRO >
using task_manager< task< TCO_MACRO > >::task_ptr_type = typename task_type::ptr_type

Definition at line 164 of file task_manager.h.

◆ task_t

template<typename TCO_MACRO >
using task_manager< task< TCO_MACRO > >::task_t = task_type

Definition at line 179 of file task_manager.h.

◆ task_type

template<typename TCO_MACRO >
using task_manager< task< TCO_MACRO > >::task_type = task<TCO_MACRO>

Definition at line 161 of file task_manager.h.

Constructor & Destructor Documentation

◆ task_manager()

template<typename TCO_MACRO >
task_manager< task< TCO_MACRO > >::task_manager ( )
inline

Definition at line 207 of file task_manager.h.

◆ ~task_manager()

template<typename TCO_MACRO >
task_manager< task< TCO_MACRO > >::~task_manager ( )
inline

Definition at line 212 of file task_manager.h.

Member Function Documentation

◆ add_task() [1/2]

template<typename TCO_MACRO >
int task_manager< task< TCO_MACRO > >::add_task ( const task_ptr_type task)
inline

add task to manager please make the task has method of get_id() and will return a unique id

Parameters
tasktask to be inserted
Returns
0 or error code

Definition at line 335 of file task_manager.h.

References add_task().

Referenced by add_task().

◆ add_task() [2/2]

template<typename TCO_MACRO >
int task_manager< task< TCO_MACRO > >::add_task ( const task_ptr_type task,
time_t  timeout_sec,
int  timeout_nsec 
)
inline

add task to manager please make the task has method of get_id() and will return a unique id

Parameters
tasktask to be inserted
timeout_sectimeout in second ( unix time stamp recommanded )
timeout_nsectimeout in nanosecond ( must be in the range 0-999999999 )
Returns
0 or error code
Note
if a task added before the first calling of tick method, the timeout will be set releative to the first calling time of tick method
See also
tick

Definition at line 270 of file task_manager.h.

References COPP_EC_ALREADY_EXIST, COPP_EC_ARGS_ERROR, COPP_EC_CAST_FAILED, COPP_EC_EXTERNAL_INSERT_FAILED, COPP_EC_IN_RESET, COPP_EC_SUCCESS, COPP_EC_TASK_ALREADY_IN_ANOTHER_MANAGER, COPP_EC_TASK_IS_EXITING, impl::task_impl::get_id(), and impl::task_impl::is_exiting().

◆ cancel()

template<typename TCO_MACRO >
int task_manager< task< TCO_MACRO > >::cancel ( id_type  id,
void *  priv_data = nullptr 
)
inline

Definition at line 570 of file task_manager.h.

References COPP_EC_IN_RESET, and COPP_EC_NOT_FOUND.

◆ create()

template<typename TCO_MACRO >
static ptr_type task_manager< task< TCO_MACRO > >::create ( )
inlinestatic

create a new task manager

Returns
smart pointer of task manager

Definition at line 255 of file task_manager.h.

◆ find_task()

template<typename TCO_MACRO >
task_ptr_type task_manager< task< TCO_MACRO > >::find_task ( id_type  id)
inline

find task by id

Parameters
idtask id
Returns
smart pointer of task

Definition at line 442 of file task_manager.h.

◆ get_checkpoints()

template<typename TCO_MACRO >
const std::set<detail::task_timer_node<id_type> >& task_manager< task< TCO_MACRO > >::get_checkpoints ( ) const
inline

get all task checkpoints, this api is just used for provide information to users

Returns
task checkpoints

Definition at line 813 of file task_manager.h.

◆ get_container()

template<typename TCO_MACRO >
const container_type& task_manager< task< TCO_MACRO > >::get_container ( ) const
inline

task container, this api is just used for provide information to users

Returns
task container

Definition at line 807 of file task_manager.h.

◆ get_last_tick_time()

template<typename TCO_MACRO >
detail::tickspec_t task_manager< task< TCO_MACRO > >::get_last_tick_time ( ) const
inline

get last tick time

Returns
last tick time

Definition at line 801 of file task_manager.h.

◆ get_task_size()

template<typename TCO_MACRO >
size_t task_manager< task< TCO_MACRO > >::get_task_size ( ) const
inline

get task number in this manager

Returns
task number

Definition at line 795 of file task_manager.h.

◆ get_tick_checkpoint_size()

template<typename TCO_MACRO >
size_t task_manager< task< TCO_MACRO > >::get_tick_checkpoint_size ( ) const
inline

get timeout checkpoint number in this manager

Returns
checkpoint number

Definition at line 789 of file task_manager.h.

◆ kill() [1/2]

template<typename TCO_MACRO >
int task_manager< task< TCO_MACRO > >::kill ( id_type  id,
enum EN_TASK_STATUS  status,
void *  priv_data = nullptr 
)
inline

Definition at line 623 of file task_manager.h.

References COPP_EC_IN_RESET, and COPP_EC_NOT_FOUND.

◆ kill() [2/2]

template<typename TCO_MACRO >
int task_manager< task< TCO_MACRO > >::kill ( id_type  id,
void *  priv_data = nullptr 
)
inline

Definition at line 665 of file task_manager.h.

References EN_TS_KILLED, and kill().

Referenced by kill().

◆ remove_task() [1/3]

template<typename TCO_MACRO >
int task_manager< task< TCO_MACRO > >::remove_task ( id_type  id)
inline

remove task in this manager

Parameters
idtask id
Returns
0 or error code

Definition at line 385 of file task_manager.h.

References remove_task().

Referenced by remove_task().

◆ remove_task() [2/3]

template<typename TCO_MACRO >
int task_manager< task< TCO_MACRO > >::remove_task ( id_type  id,
const task_ptr_type confirm_ptr 
)
inline

remove task in this manager

Parameters
idtask id
confirm_ptrcheck task ptr before just remove by id
Returns
0 or error code

Definition at line 378 of file task_manager.h.

References remove_task().

Referenced by remove_task().

◆ remove_task() [3/3]

template<typename TCO_MACRO >
int task_manager< task< TCO_MACRO > >::remove_task ( id_type  id,
const task_type confirm_ptr 
)
inline

remove task in this manager

Parameters
idtask id
confirm_ptrcheck task ptr before just remove by id
Returns
0 or error code

Definition at line 393 of file task_manager.h.

References COPP_EC_IN_RESET, COPP_EC_NOT_FOUND, COPP_EC_SUCCESS, EN_TS_CREATED, EN_TS_DONE, and EN_TS_KILLED.

◆ remove_timeout_timer()

template<typename TCO_MACRO >
void task_manager< task< TCO_MACRO > >::remove_timeout_timer ( detail::task_manager_node< task_type > &  node)
inlineprivate

Definition at line 841 of file task_manager.h.

◆ reset()

template<typename TCO_MACRO >
void task_manager< task< TCO_MACRO > >::reset ( )
inline

Definition at line 217 of file task_manager.h.

References EN_TS_KILLED.

◆ resume()

template<typename TCO_MACRO >
int task_manager< task< TCO_MACRO > >::resume ( id_type  id,
void *  priv_data = nullptr 
)
inline

Definition at line 521 of file task_manager.h.

References COPP_EC_IN_RESET, COPP_EC_NOT_FOUND, and EN_TS_DONE.

◆ set_timeout()

template<typename TCO_MACRO >
int task_manager< task< TCO_MACRO > >::set_timeout ( id_type  id,
time_t  timeout_sec,
int  timeout_nsec 
)
inline

set or update task timeout

Parameters
idtask id of which should be already added into this manager
timeout_sectimeout in second ( unix time stamp recommanded )
timeout_nsectimeout in nanosecond ( must be in the range 0-999999999 )
Returns
0 or error code
Note
if a task added before the first calling of tick method, the timeout will be set releative to the first calling time of tick method
this function can be call multiply times, we will use the last timeout. set_timeout(TASK_ID, 0, 0) means the task with TASK_ID will never expire.
See also
tick

Definition at line 351 of file task_manager.h.

References COPP_EC_IN_RESET, COPP_EC_NOT_FOUND, and COPP_EC_SUCCESS.

◆ set_timeout_timer()

template<typename TCO_MACRO >
void task_manager< task< TCO_MACRO > >::set_timeout_timer ( detail::task_manager_node< task_type > &  node,
time_t  timeout_sec,
int  timeout_nsec 
)
inlineprivate

◆ start()

template<typename TCO_MACRO >
int task_manager< task< TCO_MACRO > >::start ( id_type  id,
void *  priv_data = nullptr 
)
inline

Definition at line 472 of file task_manager.h.

References COPP_EC_IN_RESET, COPP_EC_NOT_FOUND, and EN_TS_DONE.

◆ tick()

template<typename TCO_MACRO >
int task_manager< task< TCO_MACRO > >::tick ( time_t  sec,
int  nsec = 0 
)
inline

active tick event and deal with clock

Parameters
seccurrent time in second ( unix time stamp recommanded )
nseccurrent time in nanosecond ( must be in the range 0-999999999 )
Returns
0 or error code
Note
timeout tasks will be removed here

Definition at line 675 of file task_manager.h.

References COPP_EC_IN_RESET, COPP_EC_SUCCESS, EN_TS_TIMEOUT, detail::task_timer_node< TTASK_ID_TYPE >::expired_time, detail::tickspec_t::tv_nsec, and detail::tickspec_t::tv_sec.

Field Documentation

◆ action_lock_

template<typename TCO_MACRO >
LIBCOPP_COPP_NAMESPACE_ID::util::lock::spin_lock task_manager< task< TCO_MACRO > >::action_lock_
private

Definition at line 864 of file task_manager.h.

◆ flags_

template<typename TCO_MACRO >
int task_manager< task< TCO_MACRO > >::flags_
private

Definition at line 866 of file task_manager.h.

◆ last_tick_time_

template<typename TCO_MACRO >
detail::tickspec_t task_manager< task< TCO_MACRO > >::last_tick_time_
private

Definition at line 860 of file task_manager.h.

◆ task_timeout_timer_

template<typename TCO_MACRO >
std::set<detail::task_timer_node<id_type> > task_manager< task< TCO_MACRO > >::task_timeout_timer_
private

Definition at line 861 of file task_manager.h.

◆ tasks_

template<typename TCO_MACRO >
container_type task_manager< task< TCO_MACRO > >::tasks_
private

Definition at line 859 of file task_manager.h.


The documentation for this class was generated from the following file: