acl  3.5.3.0
acl_mbox.h
浏览该文件的文档.
1 #ifndef ACL_MBOX_INCLUDE_H
2 #define ACL_MBOX_INCLUDE_H
3 
4 #ifdef __cplusplus
5 extern "C" {
6 #endif
7 
8 #include "acl_define.h"
9 
10 typedef struct ACL_MBOX ACL_MBOX;
11 
12 /**
13  * 创建无锁消息队列对象
14  * @return {ACL_MBOX}
15  */
16 ACL_API ACL_MBOX *acl_mbox_create(void);
17 
18 #define ACL_MBOX_T_SPSC 0 /* 单生产者单消费者 */
19 #define ACL_MBOX_T_MPSC 1 /* 多生产者单消费者 */
20 
21 ACL_API ACL_MBOX *acl_mbox_create2(unsigned type);
22 
23 /**
24  * 释放无锁消息队列对象
25  * @param mbox {ACL_MBOX*} 消息队列对象
26  * @param free_fn {void (*)(void*)} 非空时用来释放当前存在于消息队列中的对象
27  */
28 ACL_API void acl_mbox_free(ACL_MBOX *mbox, void (*free_fn)(void*));
29 
30 /**
31  * 向消息队列中添加动态消息对象
32  * @param mbox {ACL_MBOX*} 消息队列对象
33  * @param msg {void*}
34  * @return {int} 发送成功返回 0,否则返回 -1
35  */
36 ACL_API int acl_mbox_send(ACL_MBOX *mbox, void *msg);
37 
38 /**
39  * 从消息队列中读取消息
40  * @param mbox {ACL_MBOX*} 消息队列对象
41  * @param timeout {int} 等待超时时间(毫秒级别),如果 < 0 则一直等待直到有数据
42  * @param success {int*} 存储操作是否成功的结果, 0 表示出错,非 0 表示成功
43  * @return {void*} 返回读到的消息对象,如果返回 NULL 时还需判断 success 的值,以此来
44  * 判断读操作是否成功,如果返回非 NULL 表示成功读到一条消息
45  */
46 ACL_API void *acl_mbox_read(ACL_MBOX *mbox, int timeout, int *success);
47 
48 /**
49  * 获得当前消息队列已经成功发送的消息数
50  * @param mbox {ACL_MBOX*} 消息队列对象
51  * @return {size_t}
52  */
53 ACL_API size_t acl_mbox_nsend(ACL_MBOX *mbox);
54 
55 /**
56  * 获得当前消息队列已经成功接收到的消息数
57  * @param mbox {ACL_MBOX*} 消息队列对象
58  * @return {size_t}
59  */
60 ACL_API size_t acl_mbox_nread(ACL_MBOX *mbox);
61 
62 #ifdef __cplusplus
63 }
64 #endif
65 
66 #endif
ACL_API size_t acl_mbox_nread(ACL_MBOX *mbox)
ACL_API ACL_MBOX * acl_mbox_create2(unsigned type)
ACL_API int acl_mbox_send(ACL_MBOX *mbox, void *msg)
ACL_API size_t acl_mbox_nsend(ACL_MBOX *mbox)
struct ACL_MBOX ACL_MBOX
Definition: acl_mbox.h:10
ACL_API void acl_mbox_free(ACL_MBOX *mbox, void(*free_fn)(void *))
ACL_API void * acl_mbox_read(ACL_MBOX *mbox, int timeout, int *success)
ACL_API ACL_MBOX * acl_mbox_create(void)