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/libshm_queue.a | 0 queue/include/shm_queue.h | 29 ++++ test2/test_queue_wrapper | 0 test2/client.c | 8 test2/server | 0 include/usgcommon/usg_common.h | 3 test/test_timeout | 0 test2/test_queue_wrapper.c | 40 +++-- queue/include/shm_queue_wrapper.h | 48 +++++- test/multiple_queue_consumer | 0 test2/Makefile | 2 test/multiple_queue_productor | 0 README.md | 119 ---------------- queue/hashtable.c | 39 +++++ queue/sem_util.c | 4 test/test_queue | 0 test2/client | 0 test/test_lostdata | 0 test/single_consumer | 0 test/single_productor | 0 queue/hashtable.h | 7 queue/shm_queue_wrapper.c | 47 +++++- test2/server.c | 11 queue/include/lock_free_queue.h | 21 +- 24 files changed, 199 insertions(+), 179 deletions(-) diff --git a/README.md b/README.md index 4193faf..a611ce8 100644 --- a/README.md +++ b/README.md @@ -1,121 +1,8 @@ -<<<<<<< HEAD -## 瀹炰緥 - -``` -#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; - void * queue = shmqueue_init( 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; -} -``` +## 瀹炰緥 + 璇锋眰搴旂瓟 `./test2/server.c ./test2/client.c` ## 鎺ュ彛璇存槑 -``` - -/** - * 鍒濆鍖� - * @ shmqueue - * @ key 鏍囪瘑鍏变韩闃熷垪鐨勫敮涓�key - * @ queue_size 闃熷垪澶у皬 , 杩欎釜鍊煎繀椤绘槸2鐨勬寚鏁板嵆 1, 2, 4, 8, 16 绛� - * @ ele_size 闃熷垪涓厓绱犲ぇ灏�, 杩欎釜鍊间笉鑳借秴杩�512锛屽綋鐒跺鏋滈渶瑕佸彲浠ヨ皟鏁磋繖涓渶澶ч檺鍒� - */ -void* shmqueue_init(int key, int queue_size, int ele_size); -/** - * 閿�姣� -*/ -void shmqueue_destroy(void *shmqueue); -/** - * 闃熷垪鍏冪礌鐨勪釜鏁� - */ -uint32_t shmqueue_size(void *shmqueue); -/** - * 鏄惁宸叉弧 - */ -int shmqueue_full(void *shmqueue); - -/** - * 鏄惁涓虹┖ - */ -int shmqueue_empty(void *shmqueue); - -/** - * 鍏ラ槦, 闃熷垪婊℃椂绛夊緟 - */ -int shmqueue_push(void *shmqueue, void *src_ele); - -/** - * 鍏ラ槦, 闃熷垪婊℃椂绔嬪嵆杩斿洖 - */ -int shmqueue_push_nowait(void *shmqueue, void *src_ele); - -/** - * 鍏ラ槦, 鎸囧畾鏃堕棿鍐呭叆闃熶笉鎴愬姛灏辫繑鍥� - */ -int shmqueue_push_timeout(void *shmqueue, void *src_ele, struct timespec * timeout); - -/** - * 鍑洪槦, 闃熷垪绌烘椂绛夊緟 - */ -int shmqueue_pop(void *shmqueue, void *dest_ele); - -/** - * 鍑洪槦, 闃熷垪绌烘椂绔嬪嵆杩斿洖 - */ -int shmqueue_pop_nowait(void *shmqueue, void *dest_ele); - -/** - * 鍑洪槦, 鎸囧畾鏃堕棿鍐呭嚭闃熶笉鎴愬姛灏辫繑鍥� - */ -int shmqueue_pop_timeout(void *shmqueue, void *dest_ele, struct timespec * timeout); - -``` -======= -## softbus - -shm鐨勯�氳搴� ->>>>>>> dd08a8134dea74ac30213c1b8580bff34ee7095b - + diff --git a/include/usgcommon/usg_common.h b/include/usgcommon/usg_common.h index ad509ed..20fefe9 100644 --- a/include/usgcommon/usg_common.h +++ b/include/usgcommon/usg_common.h @@ -64,9 +64,10 @@ #include <algorithm> #include <iomanip> #include <limits> -#include <map> #include <initializer_list> #include <vector> +#include <map> +#include <set> #include <thread> #endif diff --git a/queue/hashtable.c b/queue/hashtable.c index 4662afb..629d2af 100755 --- a/queue/hashtable.c +++ b/queue/hashtable.c @@ -2,6 +2,7 @@ #include "hashtable.h" #include "mm.h" #include "sem_util.h" +#include <set> typedef struct tailq_entry_t { @@ -118,6 +119,10 @@ } + + + + void hashtable_removeall(hashtable_t *hashtable) { tailq_entry_t *item; @@ -224,3 +229,37 @@ //閲婃斁璇诲啓閿� SemUtil::inc(hashtable->wlock); } + + + +void hashtable_foreach(hashtable_t *hashtable, hashtable_foreach_cb cb) { + tailq_entry_t *item; + for (int i = 0; i < MAPSIZE; i++) { + tailq_header_t *my_tailq_head = hashtable->array[i] ; + + if (my_tailq_head == NULL ) + continue; + + TAILQ_FOREACH(item, my_tailq_head, joint) + { + cb(item->key, item -> value); + } + } +} + +std::set<int> * hashtable_keyset(hashtable_t *hashtable) { + std::set<int> *keyset = new std::set<int>; + tailq_entry_t *item; + for (int i = 0; i < MAPSIZE; i++) { + tailq_header_t *my_tailq_head = hashtable->array[i] ; + + if (my_tailq_head == NULL ) + continue; + + TAILQ_FOREACH(item, my_tailq_head, joint) + { + keyset->insert(item->key); + } + } + return keyset; +} \ No newline at end of file diff --git a/queue/hashtable.h b/queue/hashtable.h index bbe2aa6..2cdfb4d 100755 --- a/queue/hashtable.h +++ b/queue/hashtable.h @@ -2,7 +2,7 @@ #define __HASHTABLE_H__ #include <sys/queue.h> -//#include "queue.h" +#include <set> #define MAPSIZE 100 @@ -15,6 +15,7 @@ size_t readcnt; } hashtable_t; +typedef void (*hashtable_foreach_cb)(int key, void *value); void hashtable_init(hashtable_t *hashtable); void *hashtable_get(hashtable_t *hashtable, int key); @@ -23,7 +24,11 @@ void hashtable_removeall(hashtable_t *hashtable); +void hashtable_foreach(hashtable_t *hashtable, hashtable_foreach_cb cb); + void hashtable_printall(hashtable_t *hashtable); int hashtable_alloc_key(hashtable_t *hashtable); + +std::set<int> * hashtable_keyset(hashtable_t *hashtable) ; #endif diff --git a/queue/include/lock_free_queue.h b/queue/include/lock_free_queue.h index cba9f0e..d33424e 100644 --- a/queue/include/lock_free_queue.h +++ b/queue/include/lock_free_queue.h @@ -3,7 +3,7 @@ #include <usg_common.h> #include <assert.h> // assert() -#include "mm.h" +#include "mem_pool.h" #include "sem_util.h" #include "logger_factory.h" @@ -253,7 +253,8 @@ bool LockFreeQueue<ELEM_T, Q_TYPE>::pop(ELEM_T &a_data) { if (SemUtil::dec(items) == -1) { - err_exit(errno, "remove"); + err_msg(errno, "LockFreeQueue pop"); + return false; } if (m_qImpl.pop(a_data)) { @@ -272,8 +273,10 @@ if (SemUtil::dec_nowait(items) == -1) { if (errno == EAGAIN) return false; - else - err_exit(errno, "remove_nowait"); + else { + err_msg(errno, "LockFreeQueue pop_nowait"); + return false; + } } if (m_qImpl.pop(a_data)) { @@ -293,8 +296,10 @@ if (SemUtil::dec_timeout(items, timeout) == -1) { if (errno == EAGAIN) return false; - else - err_exit(errno, "remove_timeout"); + else { + err_msg(errno, "LockFreeQueue pop_timeout"); + return false; + } } if (m_qImpl.pop(a_data)) { @@ -316,14 +321,14 @@ typename ELEM_T, template <typename T> class Q_TYPE> void * LockFreeQueue<ELEM_T, Q_TYPE>::operator new(size_t size){ - return mm_malloc(size); + return mem_pool_malloc(size); } template < typename ELEM_T, template <typename T> class Q_TYPE> void LockFreeQueue<ELEM_T, Q_TYPE>::operator delete(void *p) { - return mm_free(p); + return mem_pool_free(p); } // include implementation files diff --git a/queue/include/shm_queue.h b/queue/include/shm_queue.h index 93bd7dc..3a506c9 100644 --- a/queue/include/shm_queue.h +++ b/queue/include/shm_queue.h @@ -39,6 +39,10 @@ inline ELEM_T& operator[](unsigned i); + static void remove_queues_exclue(int *keys, size_t length); +private: + + protected: /// @brief the actual queue-> methods are forwarded into the real /// implementation @@ -51,6 +55,31 @@ template < typename ELEM_T > +void SHMQueue<ELEM_T>::remove_queues_exclue(int *keys, size_t length) +{ + hashtable_t *hashtable = mm_get_hashtable(); + std::set<int>* keyset = hashtable_keyset(hashtable); + std::set<int>::iterator keyItr; + LockFreeQueue<ELEM_T>* mqueue; + bool found; + for (keyItr = keyset->begin(); keyItr != keyset->end(); keyItr++) { + found = false; + for(int i = 0; i < length; i++) { + if(*keyItr == keys[i]) { + found = true; + break; + } + } + if(!found) { + mqueue = (LockFreeQueue<ELEM_T> *)hashtable_get(hashtable, *keyItr); + delete mqueue; + } + } + delete keyset; + +} + +template < typename ELEM_T > SHMQueue<ELEM_T>::SHMQueue(int key, size_t qsize): KEY(key) { diff --git a/queue/include/shm_queue_wrapper.h b/queue/include/shm_queue_wrapper.h index cdfb2e2..6d9013b 100644 --- a/queue/include/shm_queue_wrapper.h +++ b/queue/include/shm_queue_wrapper.h @@ -22,6 +22,10 @@ */ void shm_destroy(); + + +//绉婚櫎涓嶅寘鍚湪keys涓殑闃熷垪 +void shm_remove_queues_exclue(void *keys, int length); /** * 鍒涘缓闃熷垪 * @ shmqueue @@ -31,58 +35,76 @@ void* shmqueue_create( int * key, int queue_size); /** - * 缁戝畾key鍒伴槦鍒楋紝浣嗘槸骞朵笉浼氬垱寤洪槦鍒椼�傚鏋滄病鏈夊搴旀寚瀹歬ey鐨勯槦鍒楁彁绀洪敊璇苟杩斿洖绌哄�� + * 缁戝畾key鍒伴槦鍒楋紝浣嗘槸骞朵笉浼氬垱寤洪槦鍒椼�傚鏋滄病鏈夊搴旀寚瀹歬ey鐨勯槦鍒楁彁绀洪敊璇苟閫�鍑� */ -void* shmqueue_attach(int key); +void* shmqueue_attach(int key) ; + /** * 閿�姣� */ -void shmqueue_drop(void * _shmqueue) ; +void shmqueue_drop(void * _shmqueue); /** * 闃熷垪鍏冪礌鐨勪釜鏁� */ -int shmqueue_size(void * _shmqueue); +int shmqueue_size(void * _shmqueue) ; + /** * 鏄惁宸叉弧 + * @return 1鏄紝 0鍚� */ int shmqueue_full(void * _shmqueue); /** * 鏄惁涓虹┖ + * @return 1鏄紝 0鍚� */ int shmqueue_empty(void * _shmqueue) ; /** - * 鍏ラ槦, 闃熷垪婊℃椂绛夊緟 + * 鍏ラ槦, 闃熷垪婊℃椂绛夊緟. + * @return 1 鍏ラ槦鎴愬姛, 0 鍏ラ槦澶辫触 */ -int shmqueue_push(void * _shmqueue, void *src_ele, int ele_size); +int shmqueue_push(void * _shmqueue, void *src, int size); /** - * 鍏ラ槦, 闃熷垪婊℃椂绔嬪嵆杩斿洖 + * 鍏ラ槦, 闃熷垪婊℃椂绔嬪嵆杩斿洖. + * @return 1 鍏ラ槦鎴愬姛, 0 鍏ラ槦澶辫触 */ -int shmqueue_push_nowait(void * _shmqueue, void *src_ele, int ele_size) ; +int shmqueue_push_nowait(void * _shmqueue, void *src, int size) ; /** * 鍏ラ槦, 鎸囧畾鏃堕棿鍐呭叆闃熶笉鎴愬姛灏辫繑鍥� - * timespec {sec绉�, nsec绾崇} + * @sec 绉� + * @nsec 绾崇 + * @return 1 鍏ラ槦鎴愬姛, 0 鍏ラ槦澶辫触 */ -int shmqueue_push_timeout(void * _shmqueue, void *src_ele, int ele_size, void * _timeout); +int shmqueue_push_timeout(void * _shmqueue, void *src, int size, int sec, int nsec) ; /** * 鍑洪槦, 闃熷垪绌烘椂绛夊緟 + * @return 1 鍑洪槦鎴愬姛锛� 0鍑洪槦澶辫触 */ -int shmqueue_pop(void * _shmqueue, void *dest_ele); +int shmqueue_pop(void * _shmqueue, void **dest, int *size); /** * 鍑洪槦, 闃熷垪绌烘椂绔嬪嵆杩斿洖 + * @return 1 鍑洪槦鎴愬姛锛� 0鍑洪槦澶辫触 */ -int shmqueue_pop_nowait(void * _shmqueue, void *dest_ele) ; +int shmqueue_pop_nowait(void * _shmqueue, void **dest, int *size) ; /** * 鍑洪槦, 鎸囧畾鏃堕棿鍐呭嚭闃熶笉鎴愬姛灏辫繑鍥� + * @sec绉� + * @nsec绾崇 + * @return 1 鍑洪槦鎴愬姛锛� 0鍑洪槦澶辫触 */ -int shmqueue_pop_timeout(void * _shmqueue, void *dest_ele, void * _timeout); +int shmqueue_pop_timeout(void * _shmqueue, void **dest, int *size, int sec, int nsec); + +/** + * 閲婃斁鍑洪槦鍒嗛厤鐨勫唴瀛� + */ +void shmqueue_free(void *ptr); #ifdef __cplusplus } diff --git a/queue/libshm_queue.a b/queue/libshm_queue.a index 834164e..4676de3 100644 --- a/queue/libshm_queue.a +++ b/queue/libshm_queue.a Binary files differ diff --git a/queue/sem_util.c b/queue/sem_util.c index ea23f7c..6ed43fa 100644 --- a/queue/sem_util.c +++ b/queue/sem_util.c @@ -132,7 +132,7 @@ void SemUtil::remove(int semid) { union semun dummy; if (semctl(semid, 0, IPC_RMID, dummy) == -1) - err_exit(errno, "semctl"); + err_msg(errno, "SemUtil::remove"); } @@ -142,7 +142,7 @@ union semun arg; arg.val = val; if (semctl(semId, 0, SETVAL, arg) == -1) - err_exit(errno, "SemUtil::set semctl"); + err_msg(errno, "SemUtil::set"); } 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); +} + diff --git a/test/multiple_queue_consumer b/test/multiple_queue_consumer index f61b254..0db518d 100755 --- a/test/multiple_queue_consumer +++ b/test/multiple_queue_consumer Binary files differ diff --git a/test/multiple_queue_productor b/test/multiple_queue_productor index 7c72ebd..29046c6 100755 --- a/test/multiple_queue_productor +++ b/test/multiple_queue_productor Binary files differ diff --git a/test/single_consumer b/test/single_consumer index 2086547..f3369d1 100755 --- a/test/single_consumer +++ b/test/single_consumer Binary files differ diff --git a/test/single_productor b/test/single_productor index 214555a..f0a8b92 100755 --- a/test/single_productor +++ b/test/single_productor Binary files differ diff --git a/test/test_lostdata b/test/test_lostdata index 159b08c..7ca646d 100755 --- a/test/test_lostdata +++ b/test/test_lostdata Binary files differ diff --git a/test/test_queue b/test/test_queue index 2c19fc1..f8b2955 100755 --- a/test/test_queue +++ b/test/test_queue Binary files differ diff --git a/test/test_timeout b/test/test_timeout index c4469a4..d83e4ce 100755 --- a/test/test_timeout +++ b/test/test_timeout Binary files differ diff --git a/test2/Makefile b/test2/Makefile index be8415f..9743df5 100644 --- a/test2/Makefile +++ b/test2/Makefile @@ -14,7 +14,7 @@ include $(ROOT)/Make.defines.$(PLATFORM) -PROGS = test_queue_wrapper server client sem_test +PROGS = test_queue_wrapper server client build: $(PROGS) diff --git a/test2/client b/test2/client index 4a1aa39..516aeb1 100755 --- a/test2/client +++ b/test2/client Binary files differ diff --git a/test2/client.c b/test2/client.c index fd511d5..2d4746d 100644 --- a/test2/client.c +++ b/test2/client.c @@ -17,15 +17,17 @@ msg_t msg; msg.key = key; - msg_t rec_msg; + void * rec_msg; + int rec_msg_size; //鍏ラ槦 while(true) { printf("=====>say some thing:\n"); scanf("%s", msg.buf); shmqueue_push(remote_queue, (void *)&msg, sizeof(msg)); //printf("send: %s\n", msg.buf); - shmqueue_pop(local_queue, (void *)&rec_msg ); - printf("=====>peer : %s\n", rec_msg.buf); + shmqueue_pop(local_queue, &rec_msg, &rec_msg_size); + printf("=====>peer : %s\n", ((msg_t*)rec_msg)->buf); + free(rec_msg); } diff --git a/test2/server b/test2/server index f48ed6c..47e62b9 100755 --- a/test2/server +++ b/test2/server Binary files differ diff --git a/test2/server.c b/test2/server.c index 2cf97a1..f3fa3b5 100644 --- a/test2/server.c +++ b/test2/server.c @@ -9,7 +9,8 @@ } msg_t; void server() { - msg_t msg; + void * msg; + int msg_size; msg_t send_msg; int key = 1; size_t qsize = 16; @@ -17,11 +18,11 @@ struct timespec timeout = {1, 0}; - while(shmqueue_pop(local_queue, (void *)&msg) ) { - void * remote_queue = shmqueue_attach(msg.key); - printf("received: %s\n", msg.buf); + while(shmqueue_pop(local_queue, &msg, &msg_size) ) { + void * remote_queue = shmqueue_attach(((msg_t *)msg)->key); + printf("received: %s\n", ((msg_t *)msg)->buf); // send_msg.key = 1; - sprintf(send_msg.buf, "hello, I have received: %s!", msg.buf); + sprintf(send_msg.buf, "hello, I have received: %s!", ((msg_t *)msg)->buf); shmqueue_push(remote_queue, (void *)&send_msg, sizeof(send_msg)); shmqueue_drop(remote_queue); // cout << item.pic << endl; diff --git a/test2/test_queue_wrapper b/test2/test_queue_wrapper index e6d73d9..493e51d 100755 --- a/test2/test_queue_wrapper +++ b/test2/test_queue_wrapper Binary files differ diff --git a/test2/test_queue_wrapper.c b/test2/test_queue_wrapper.c index 7ae3e9c..6483fb3 100644 --- a/test2/test_queue_wrapper.c +++ b/test2/test_queue_wrapper.c @@ -1,36 +1,40 @@ #include "shm_queue_wrapper.h" #include "mm.h" -typedef struct message_t -{ - char method[20]; - int code; +// typedef struct message_t +// { +// char method[20]; +// int code; -} message_t; +// } message_t; void test1() { unsigned int i = 0; - int key = -1; + int key = 1; size_t qsize = 16; void * queue = shmqueue_create( &key, qsize); - message_t item; + //message_t item; + char msg[100]; + void *rtmsg; + int size; for(i = 0; i < qsize; i++) { - sprintf(item.method, "hello"); - item.code = i ; + sprintf(msg, "%d hello", i); //鍏ラ槦 - if(shmqueue_push(queue, (void *)&item, sizeof(message_t))) { - printf("push:%d %s\n", item.code, item.method ); + if(shmqueue_push(queue, (void *)msg, sizeof(msg))) { + printf("push: %s\n", msg ); } } - printf("%d\n", key); - struct timespec timeout = {1, 0}; - + printf("key == %d\n", key); + // struct timespec timeout = {1, 0}; + // int keys[] = {1,2}; + // shm_remove_queues_exclue((void *)keys, 1); i = 0; // 鍑洪槦 - while((shmqueue_pop_timeout(queue, (void *)&item, &timeout)) ) { - printf("pop:%d %s\n", item.code, item.method ); + while((shmqueue_pop_timeout(queue, &rtmsg, &size, 1, 0)) ) { + printf("pop: %s\n", (char *)rtmsg ); + free(rtmsg); // cout << item.pic << endl; i++; } @@ -41,10 +45,10 @@ int main () { - mm_init(512); + shm_init(512); test1(); //鏁翠釜杩涚▼閫�鍑烘椂闇�瑕佹墽琛岃繖涓柟娉曪紝璇ユ柟娉曢鍏堜細妫�鏌ユ槸鍚﹁繕鏈夊叾浠栬繘绋嬪湪浣跨敤璇ュ叡浜唴瀛橈紝濡傛灉杩樻湁鍏朵粬杩涚▼鍦ㄤ娇鐢ㄥ氨鍙槸detach,濡傛灉娌℃湁鍏朵粬杩涚▼鍦ㄤ娇鐢ㄥ垯閿�姣佹暣鍧楀唴瀛樸�� - mm_destroy(); + shm_destroy(); return 0; } \ No newline at end of file -- Gitblit v1.8.0