acl  3.5.3.0
acl_aqueue.h
浏览该文件的文档.
1 #ifndef ACL_AQUEUE_INCLUDE_H
2 #define ACL_AQUEUE_INCLUDE_H
3 
4 #include "../stdlib/acl_define.h"
5 #include "../thread/acl_thread.h"
6 
7 #ifdef __cplusplus
8 extern "C" {
9 #endif
10 
11 #define ACL_AQUEUE_ERR_UNKNOWN -1
12 #define ACL_AQUEUE_OK 0
13 #define ACL_AQUEUE_ERR_LOCK 1
14 #define ACL_AQUEUE_ERR_UNLOCK 2
15 #define ACL_AQUEUE_ERR_TIMEOUT 3
16 #define ACL_AQUEUE_ERR_COND_WAIT 4
17 #define ACL_AQUEUE_ERR_COND_SIGNALE 5
18 
20 typedef struct ACL_AQUEUE ACL_AQUEUE;
21 
22 typedef void (*ACL_AQUEUE_FREE_FN)(void *);
23 /**
24  * 产生一个新队列对象句柄
25  * @return ACL_AQUEUE 结构指针
26  */
27 ACL_API ACL_AQUEUE *acl_aqueue_new(void);
28 
29 /**
30  * 设置是否严格检查队列的所有者,默认为否,需要进行该检查的有 acl_aqueue_free
31  * @param queue ACL_AQUEUE 结构指针
32  * @param flag 是与否
33  */
34 ACL_API void acl_aqueue_check_owner(ACL_AQUEUE *queue, char flag);
35 
36 /**
37  * 设置队列的所有者, 只有所有者才有权释放队列, 即调用 acl_aqueue_free()
38  * @param queue ACL_AQUEUE 结构指针
39  * @param owner 由线程号标识的所有者的ID号
40  */
41 ACL_API void acl_aqueue_set_owner(ACL_AQUEUE *queue, unsigned int owner);
42 
43 /**
44  * 释放队列对象句柄
45  * @param queue ACL_AQUEUE 结构指针
46  * @param free_fn 当释放队列时, 如果该函数不为空, 则内部通过此函数将队列中的
47  * 用户注册的数据队列进行释放
48  */
49 ACL_API void acl_aqueue_free(ACL_AQUEUE *queue, ACL_AQUEUE_FREE_FN free_fn);
50 
51 /**
52  * 从队列中提取一个元素, 不带超时, 一直等到有元素可用或出错
53  * @param queue ACL_AQUEUE 结构指针
54  * @return 用户通过 acl_aqueue_push 加入的元素指针
55  */
56 ACL_API void *acl_aqueue_pop(ACL_AQUEUE *queue);
57 
58 /**
59  * 从队列中提取一个元素, 带超时, 一直等到有元素可用或超时或出错
60  * @param queue ACL_AQUEUE 结构指针
61  * @param tmo_sec 从队列中提取元素的超时时间, 单位为秒
62  * @param tmo_usec 从队列中提取元素的超时时间, 单位为微秒
63  * @return 用户通过 acl_aqueue_push 加入的元素指针
64  */
65 ACL_API void *acl_aqueue_pop_timedwait(ACL_AQUEUE *queue, int tmo_sec, int tmo_usec);
66 
67 /**
68  * 向队列中添加一个元素
69  * @param queue ACL_AQUEUE 结构指针
70  * @param data 用户的数据指针
71  * @return {int} 添加队列元素是否成功, 0: ok; < 0: error
72  */
73 ACL_API int acl_aqueue_push(ACL_AQUEUE *queue, void *data);
74 
75 /**
76  * 获得上一次队列操作的错误号, define as: ACL_AQUEUE_XXX
77  * @param queue ACL_AQUEUE 结构指针
78  * @return 错误号
79  */
80 ACL_API int acl_aqueue_last_error(const ACL_AQUEUE *queue);
81 
82 /**
83  * 设置队列为退出状态
84  * @param queue ACL_AQUEUE 结构指针
85  */
86 ACL_API void acl_aqueue_set_quit(ACL_AQUEUE *queue);
87 
88 /**
89  * 获得当前队列中队列元素的个数
90  * @param queue {ACL_AQUEUE*}
91  * @return {int} 队列中元素个数,< 0 表示出错
92  */
93 ACL_API int acl_aqueue_qlen(ACL_AQUEUE* queue);
94 
95 #ifdef __cplusplus
96 }
97 #endif
98 #endif
99 
ACL_API int acl_aqueue_last_error(const ACL_AQUEUE *queue)
ACL_API int acl_aqueue_qlen(ACL_AQUEUE *queue)
struct ACL_AQUEUE ACL_AQUEUE
Definition: acl_aqueue.h:20
void(* ACL_AQUEUE_FREE_FN)(void *)
Definition: acl_aqueue.h:22
ACL_API int acl_aqueue_push(ACL_AQUEUE *queue, void *data)
ACL_API void acl_aqueue_set_owner(ACL_AQUEUE *queue, unsigned int owner)
ACL_API void acl_aqueue_check_owner(ACL_AQUEUE *queue, char flag)
ACL_API ACL_AQUEUE * acl_aqueue_new(void)
struct ACL_AQUEUE_ITEM ACL_AQUEUE_ITEM
Definition: acl_aqueue.h:19
ACL_API void acl_aqueue_free(ACL_AQUEUE *queue, ACL_AQUEUE_FREE_FN free_fn)
ACL_API void * acl_aqueue_pop_timedwait(ACL_AQUEUE *queue, int tmo_sec, int tmo_usec)
ACL_API void acl_aqueue_set_quit(ACL_AQUEUE *queue)
ACL_API void * acl_aqueue_pop(ACL_AQUEUE *queue)