acl  3.5.3.0
acl::mbox< T > 模板类 参考

#include <mbox.hpp>

+ 类 acl::mbox< T > 继承关系图:
+ acl::mbox< T > 的协作图:

Public 成员函数

 mbox (bool free_obj=true, bool mpsc=true)
 
 ~mbox (void)
 
bool push (T *t, bool dummy=false)
 
T * pop (int timeout=-1, bool *success=NULL)
 
size_t push_count (void) const
 
size_t pop_count (void) const
 

额外继承的成员函数

- Protected 成员函数 继承自 acl::acl::noncopyable
 noncopyable ()
 
 ~noncopyable ()
 

详细描述

template<typename T>
class acl::mbox< T >

可用于在线程之间、协程之间进行通信的类,内部实现采用无锁队列 + IO 通信相 结合方式实现

示例:

class myobj { public: myobj(void) {} ~myobj(void) {}

void run(void) { printf("hello world!\r\n"); } };

acl::mbox<myobj> mbox;

void thread_producer(void) { myobj* o = new myobj; mbox.push(o); }

void thread_consumer(void) { myobj* o = mbox.pop(); o->run(); delete o; }

在文件 mbox.hpp52 行定义.

构造及析构函数说明

◆ mbox()

template<typename T>
acl::mbox< T >::mbox ( bool  free_obj = true,
bool  mpsc = true 
)
inline

构造方法

参数
free_obj{bool} 当 tbox 销毁时,是否自动检查并释放 未被消费的动态对象
mpsc{bool} 是否为多生产者-单消费者模式

在文件 mbox.hpp61 行定义.

62  : free_obj_(free_obj)
63  {
64  mbox_ = mbox_create(mpsc);
65  assert(mbox_);
66  }
void * mbox_create(bool mpsc)

◆ ~mbox()

template<typename T>
acl::mbox< T >::~mbox ( void  )
inline

在文件 mbox.hpp68 行定义.

69  {
70  mbox_free(mbox_, free_obj_ ? mbox_free_fn : NULL);
71  }
void mbox_free(void *, void(*free_fn)(void *))

成员函数说明

◆ pop()

template<typename T>
T* acl::mbox< T >::pop ( int  timeout = -1,
bool *  success = NULL 
)
inline

接收消息对象

参数
timeout{int} >= 0 时设置读等待超时时间(毫秒级别),否则 永远等待直到读到消息对象或出错
success{bool*} 可以用于辅助确定读操作是否成功
返回
{T*} 非 NULL 表示读到一个消息对象,为 NULL 时,还需通过 success 参数的返回值检查操作是否成功

在文件 mbox.hpp93 行定义.

94  {
95  return (T*) mbox_read(mbox_, timeout, success);
96  }
void * mbox_read(void *, int, bool *)

◆ pop_count()

template<typename T>
size_t acl::mbox< T >::pop_count ( void  ) const
inline

统计当前已经接收到的消息数

返回
{size_t}

在文件 mbox.hpp111 行定义.

112  {
113  return mbox_nread(mbox_);
114  }
size_t mbox_nread(void *)

◆ push()

template<typename T>
bool acl::mbox< T >::push ( T *  t,
bool  dummy = false 
)
inline

发送消息对象

参数
t{T*} 非空消息对象
dummy{bool} 目前无任何用处,仅是为了与 tbox 接口一致
返回
{bool} 发送是否成功

在文件 mbox.hpp79 行定义.

80  {
81  (void) dummy;
82  return mbox_send(mbox_, t);
83  }
bool mbox_send(void *, void *)

◆ push_count()

template<typename T>
size_t acl::mbox< T >::push_count ( void  ) const
inline

统计当前已经发送的消息数

返回
{size_t}

在文件 mbox.hpp102 行定义.

103  {
104  return mbox_nsend(mbox_);
105  }
size_t mbox_nsend(void *)

该类的文档由以下文件生成: