#include "shm_queue_wrapper.h" typedef struct msg_t { int key; char buf[100]; } msg_t; static void * remote_queues[100]; static int remote_queues_len = 0; void *pub(void *) { msg_t send_msg; send_msg.key = 1; while(true) { for(int i = 0; i < remote_queues_len; i++ ) { sprintf(send_msg.buf, "今日头条××××"); shmqueue_push(remote_queues[i], (void *)&send_msg, sizeof(send_msg)); } sleep(2); } } void server() { void * msg; int msg_size; int key = 1; size_t qsize = 16; void * local_queue = shmqueue_create( &key, qsize); pthread_t tid; pthread_create(&tid, NULL, pub, NULL); while(shmqueue_pop(local_queue, &msg, &msg_size) ) { void * remote_queue = shmqueue_attach(((msg_t *)msg)->key); remote_queues[remote_queues_len++] = remote_queue; printf("收到订阅请求", ((msg_t *)msg)->buf); // shmqueue_drop(remote_queue); // cout << item.pic << endl; // i++; } //销毁队列 shmqueue_drop(local_queue); } int main () { shm_init(512); server(); //整个进程退出时需要执行这个方法,该方法首先会检查是否还有其他进程在使用该共享内存,如果还有其他进程在使用就只是detach,如果没有其他进程在使用则销毁整块内存。 shm_destroy(); return 0; }