/* 往消息队列中添加一个消息,并向主线程发送通知 */ void proctl_msg_push(PROCTL_MSG *msg) { LOCK_WAITING_SERVICE; acl_fifo_push(__services_wait, msg); UNLOCK_WAITING_SERVICE; /* 向主线程发送消息 */ ReleaseSemaphore(__sem_handle, 1, NULL); }
static ACL_FIFO *mail_addr_add(ACL_FIFO *addr_list, const char *addr) { MAIL_ADDR *mail_addr; if (addr_list == NULL) addr_list = acl_fifo_new(); mail_addr = (MAIL_ADDR*) acl_mycalloc(1, sizeof(MAIL_ADDR)); mail_addr->addr = acl_mystrdup(addr); acl_fifo_push(addr_list, mail_addr); return (addr_list); }
void file_cache_push(FILE_CACHE *cache, const void *data, size_t size) { BUFFER *buffer = acl_mymalloc(sizeof(BUFFER)); buffer->buf = acl_mymalloc(size); buffer->size = size; memcpy(buffer->buf, data, size); buffer->ptr = buffer->buf; cache->size += size; acl_fifo_push(cache->fifo, buffer); }
static void fifo_test(bool use_slice) { ACL_FIFO *fifo; int i; char *ptr; ACL_SLICE_POOL *slice; if (use_slice) slice = acl_slice_pool_create(10, 100, ACL_SLICE_FLAG_GC2 | ACL_SLICE_FLAG_RTGC_OFF); else slice = NULL; fifo = acl_fifo_new1(slice); for (i = 0; i < 20; i++) { if (slice) ptr = (char*) acl_slice_pool_alloc(__FILE__, __LINE__, slice, 100); else ptr = (char*) acl_mymalloc(100); snprintf(ptr, 100, "test:%d", i); (void) acl_fifo_push(fifo, ptr); printf(">>>ptr: %s\n", ptr); } while (1) { ptr = (char*) acl_fifo_pop(fifo); if (ptr == NULL) break; printf("fifo pop: %s\n", ptr); } if (slice == NULL) acl_fifo_free(fifo, acl_myfree_fn); else acl_slice_pool_destroy(slice); }