简介
其提供了并发处理事件的能力
结构
ACE_Task_Base :Task框架的基类,提供了线程入口函数svc_run,内部调用svc虚函数
- activate:创建线程执行任务svc_run
- svc_run:向线程池中注册线程退出时的处理函数,执行任务的svc处理函数,调用任务的cleanup清理函数,将线程退出处理函数中列表中删除
ACE_Task:模板类,提供了同步策略。一个线程对应一个Task
ACE_Thread_Manager
- spawn_n:带有task的参数时,表示创建的线程执行task,同时创建ACE_Thread_Descriptor,填充参数
task_
,添加到thr_list_
中 ACE_Task_Base *task()
:返回当前执行线程的ACE_Taskint wait_task (ACE_Task_Base *task)
:等待执行task的所有线程结束int suspend_task (ACE_Task_Base *task)
:挂起执行task的所有线程,如果挂起失败,则将线程添加到thr_to_be_removed_
中int resume_task (ACE_Task_Base *task)
:恢复挂起的task的所有线程int kill_task (ACE_Task_Base *task, int signum)
:向执行task的所有线程发送signum信号int cancel_task (ACE_Task_Base *task, int async_cancel = 0)
:取消执行task的所有线程int num_threads_in_task (ACE_Task_Base *task)
:返回执行task的线程数ssize_t task_list (int grp_id,ACE_Task_Base *task_list[],size_t n)
:返回线程组id为grp_id的任务列表,最多返回n个ssize_t thread_list (ACE_Task_Base *task,ACE_thread_t thread_list[],size_t n)
:返回执行任务为task的线程id列表,最多返回n个ssize_t hthread_list (ACE_Task_Base *task,ACE_hthread_t hthread_list[],size_t n)
:返回执行任务为task的线程列表,最多返回n个ssize_t task_all_list (ACE_Task_Base *task_list[],size_t n)
:返回线程池管理的所有的task列表,最多返回n个int set_grp (ACE_Task_Base *task, int grp_id)
:设置执行task的线程的线程组idint get_grp (ACE_Task_Base *task, int &grp_id)
:获取执行task的线程的线程组id
ACE_Message_Queue_Base:
int state_
:表示消息队列的状态,可能值有ACTIVATED, DEACTIVATED和PULSED。ACTIVATED状态可以作入队出队操作,DEACTIVATED不可以作入队出队操作
ACE_Message_Queue
ACE_Message_Queue:通过队列实现了half sync/half async
ACE_SYNCH_CONDITION_T not_empty_cond_
:队列不为空的条件变量ACE_SYNCH_CONDITION_T not_full_cond_
:队列没有满的条件变量ACE_Notification_Strategy *notification_strategy_
:通知策略,当消息进入队列时触发ACE::Monitor_Control::Size_Monitor *monitor_
:当大小改变时,发送队列大小
ACE_Message_Block:当中的cont_用于将多个消息块组合
初始化
- ACE_Message_Queue()构造函数
- open()
流量控制
- high_water_mark()
- low_water_mark()
当队列中的字节数大于高水位时,入队列会阻塞,等到没有满的条件变量满足。当有入队列操作时,也会唤醒等待不为空的条件变量的线程。
在出队列时,如果当前字节数小于低水位时,会唤醒阻塞在等待没有满条件变量的线程
入出队列
其参数为ACE_Message_Block
- enqueue_prio
- enqueue_deadline
- enqueue
- enqueue_tail
- enqueue_head
- dequeue
- dequeue_head
- dequeue_prio
- dequeue_tail
- dequeue_deadline
- is_full
- is_empty
关闭销毁
- close
- flush:有加锁操作
- flush_i
- ~ACE_Message_Queue
状态变更
- deactivate
- activate
- pulse
ACE_Message_Queue_Ex
内部还是使用ACE_Message_Queue,只是传入的数据是具体的数据类型,不是 ACE_Message_Block
其结构为