From 91f003aac4c95f4d2a2fc0782c9bea9d484b6919 Mon Sep 17 00:00:00 2001 From: wangzhengquan <wangzhengquan85@126.com> Date: 星期四, 09 七月 2020 14:48:07 +0800 Subject: [PATCH] update --- README.md | 131 +++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 129 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 891e42f..29dd32a 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,131 @@ -## cppShmqueue +## 瀹炰緥 -Cpp鐗堟湰鐨勫叡浜唴瀛橀槦鍒楀簱 +``` +#include "shm_queue_wrapper.h" +#include "mm.h" + +typedef struct message_t +{ + char method[20]; + int code; + +} message_t; + +void test1() { + unsigned int i = 0; + int key = 2; + + size_t qsize = 16; + shmqueue_t queue; + shmqueue_init(&queue, key, qsize, sizeof(message_t)); + message_t item; + // LockFreeQueue<struct Item> queue(16); + for(i = 0; i < qsize; i++) { + sprintf(item.method, "hello"); + item.code = i ; + if(shmqueue_push(&queue, (void *)&item)) { + printf("push:%d %s\n", item.code, item.method ); + } + } + + struct timespec timeout = {1, 0}; + + i = 0; + while((shmqueue_pop_timeout(&queue, (void *)&item, &timeout)) ) { + printf("pop:%d %s\n", item.code, item.method ); + // cout << item.pic << endl; + i++; + } + + shmqueue_destroy(&queue); +} + + +int main () { + test1(); + + //鏁翠釜杩涚▼閫�鍑烘椂闇�瑕佹墽琛岃繖涓柟娉曪紝璇ユ柟娉曢鍏堜細妫�鏌ユ槸鍚﹁繕鏈夊叾浠栬繘绋嬪湪浣跨敤璇ュ叡浜唴瀛橈紝濡傛灉杩樻湁鍏朵粬杩涚▼鍦ㄤ娇鐢ㄥ氨鍙槸detach,濡傛灉娌℃湁鍏朵粬杩涚▼鍦ㄤ娇鐢ㄩ攢姣佹暣鍧楀唴瀛樸�� + mm_destroy(); + return 0; +} +``` +## 鎺ュ彛璇存槑 + +``` + +/** + * 鍒濆鍖� + * @ shmqueue + * @ key 鏍囪瘑鍏变韩闃熷垪鐨勫敮涓�key + * @ queue_size 闃熷垪澶у皬 + * @ ele_size 闃熷垪涓厓绱犲ぇ灏� + */ +inline void shmqueue_init(shmqueue_t *shmqueue, int key, int queue_size, int ele_size) { + if(ele_size > MAX_ELE_SIZE) { + err_exit(0, "shmqueue_init 鍏冪礌澶у皬瓒呰繃璁捐鐨勬渶澶уぇ灏�"); + } + SHMQueue<ele_t> *queue = new SHMQueue<ele_t>(key, queue_size); + shmqueue->mqueue = (void *)queue; + shmqueue->ele_size = ele_size; +} + + + +/** + * 閿�姣� +*/ +inline void shmqueue_destroy(shmqueue_t *shmqueue) { + delete (SHMQueue<ele_t> *)shmqueue->mqueue; +} + +/** + * 闃熷垪鍏冪礌鐨勪釜鏁� + */ +inline uint32_t shmqueue_size(shmqueue_t *shmqueue) { + return ((SHMQueue<ele_t> *)(shmqueue->mqueue))->size(); +} + +/** + * 鏄惁宸叉弧 + */ +inline int shmqueue_full(shmqueue_t *shmqueue) { + return ((SHMQueue<ele_t> *)(shmqueue->mqueue))->full(); +} + +/** + * 鏄惁涓虹┖ + */ +inline int shmqueue_empty(shmqueue_t *shmqueue) { + return ((SHMQueue<ele_t> *)(shmqueue->mqueue))->empty(); +} + +/** + * 鍏ラ槦, 闃熷垪婊℃椂绛夊緟 + */ +inline int shmqueue_push(shmqueue_t *shmqueue, void *src_ele) + +/** + * 鍏ラ槦, 闃熷垪婊℃椂绔嬪嵆杩斿洖 + */ +inline int shmqueue_push_nowait(shmqueue_t *shmqueue, void *src_ele) + +/** + * 鍏ラ槦, 鎸囧畾鏃堕棿鍐呭叆瀵逛笉鎴愬姛灏辫繑鍥� + */ +inline int shmqueue_push_timeout(shmqueue_t *shmqueue, void *src_ele, struct timespec * timeout) +/** + * 鍑洪槦, 闃熷垪绌烘椂绛夊緟 + */ +inline int shmqueue_pop(shmqueue_t *shmqueue, void *dest_ele) + +/** + * 鍑洪槦, 闃熷垪绌烘椂绔嬪嵆杩斿洖 + */ +inline int shmqueue_pop_nowait(shmqueue_t *shmqueue, void *dest_ele) +/** + * 鍑洪槦, 鎸囧畾鏃堕棿鍐呭嚭瀵逛笉鎴愬姛灏辫繑鍥� + */ +inline int shmqueue_pop_timeout(shmqueue_t *shmqueue, void *dest_ele, struct timespec * timeout) + +``` -- Gitblit v1.8.0