From 8b4ddf10e71e1c8fabd33c72b282f7da65ff682f Mon Sep 17 00:00:00 2001 From: wangzhengquan <wangzhengquan85@126.com> Date: 星期二, 14 七月 2020 15:59:44 +0800 Subject: [PATCH] commit --- queue/shm_queue_wrapper.c | 47 ++++++++++++++++++++++++++++++++++++----------- 1 files changed, 36 insertions(+), 11 deletions(-) diff --git a/queue/shm_queue_wrapper.c b/queue/shm_queue_wrapper.c index cb30568..a6abd17 100644 --- a/queue/shm_queue_wrapper.c +++ b/queue/shm_queue_wrapper.c @@ -21,6 +21,11 @@ mem_pool_destroy(); } +//绉婚櫎涓嶅寘鍚湪keys涓殑闃熷垪 +void shm_remove_queues_exclue(void *keys, int length) { + SHMQueue<ele_t>::remove_queues_exclue((int*)keys, (size_t)length); +} + /** * 鍒涘缓闃熷垪 * @ shmqueue @@ -122,27 +127,33 @@ /** * 鍏ラ槦, 鎸囧畾鏃堕棿鍐呭叆闃熶笉鎴愬姛灏辫繑鍥� - * timespec {sec绉�, nsec绾崇} + * @sec绉� + * @nsec绾崇 */ -int shmqueue_push_timeout(void * _shmqueue, void *src, int size, void * _timeout) { - struct timespec *timeout = (struct timespec *)_timeout; +int shmqueue_push_timeout(void * _shmqueue, void *src, int size, int sec, int nsec) { + + struct timespec timeout = {sec, nsec}; shmqueue_t * shmqueue = (shmqueue_t *)_shmqueue; ele_t dest; dest.size = size; dest.buf = mm_malloc(size); memcpy(dest.buf, src, size); - return ((SHMQueue<ele_t> *)(shmqueue->mqueue))->push_timeout(dest, timeout); + return ((SHMQueue<ele_t> *)(shmqueue->mqueue))->push_timeout(dest, &timeout); } /** * 鍑洪槦, 闃熷垪绌烘椂绛夊緟 */ -int shmqueue_pop(void * _shmqueue, void *dest) { +int shmqueue_pop(void * _shmqueue, void **dest, int *size) { shmqueue_t * shmqueue = (shmqueue_t *)_shmqueue; ele_t src; + bool rv = ((SHMQueue<ele_t> *)(shmqueue->mqueue))->pop(src); if (rv) { - memcpy(dest, src.buf, src.size); + void * _dest = malloc(src.size); + memcpy(_dest, src.buf, src.size); + *dest = _dest; + *size = src.size; mm_free(src.buf); return 1; } else { @@ -154,12 +165,16 @@ /** * 鍑洪槦, 闃熷垪绌烘椂绔嬪嵆杩斿洖 */ -int shmqueue_pop_nowait(void * _shmqueue, void *dest) { +int shmqueue_pop_nowait(void * _shmqueue, void **dest, int *size) { shmqueue_t * shmqueue = (shmqueue_t *)_shmqueue; ele_t src; + bool rv = ((SHMQueue<ele_t> *)(shmqueue->mqueue))->pop_nowait(src); if (rv) { + void * _dest = malloc(src.size); memcpy(dest, src.buf, src.size); + *dest = _dest; + *size = src.size; mm_free(src.buf); return 1; } else { @@ -169,14 +184,20 @@ /** * 鍑洪槦, 鎸囧畾鏃堕棿鍐呭嚭闃熶笉鎴愬姛灏辫繑鍥� + * @sec绉� + * @nsec绾崇 */ -int shmqueue_pop_timeout(void * _shmqueue, void *dest, void * _timeout) { - struct timespec *timeout = (struct timespec *)_timeout; +int shmqueue_pop_timeout(void * _shmqueue, void **dest, int *size, int sec, int nsec) { + struct timespec timeout = {sec, nsec}; shmqueue_t * shmqueue = (shmqueue_t *)_shmqueue; ele_t src; - bool rv = ((SHMQueue<ele_t> *)(shmqueue->mqueue))->pop_timeout(src, timeout); + + bool rv = ((SHMQueue<ele_t> *)(shmqueue->mqueue))->pop_timeout(src, &timeout); if (rv) { - memcpy(dest, src.buf, src.size); + void * _dest = malloc(src.size); + memcpy(_dest, src.buf, src.size); + *dest = _dest; + *size = src.size; mm_free(src.buf); return 1; } else { @@ -184,4 +205,8 @@ } } +void shmqueue_free(void *ptr) { + free(ptr); +} + -- Gitblit v1.8.0