中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

基于消息機(jī)制的異步架構(gòu)之消息隊(duì)列

2018-07-20    來源:open-open

容器云強(qiáng)勢上線!快速搭建集群,上萬Linux鏡像隨意使用
消息隊(duì)列的頭文件msgqueue.h

/*
 * msgqueue.h
 *
 */


#ifndef MSGQUEUE_H_
#define MSGQUEUE_H_


#include "conn.h"


#define MAX_MSG_LENGTH (1024)
typedef struct MSG {
char buf[MAX_MSG_LENGTH];
uint16 buf_len;
CONN* c;
struct MSG* next;


} MSG;


typedef struct MSG_QUEUE {
MSG *head;
MSG *tail;
int size;
} MSG_QUEUE;


MSG_QUEUE* create_msg_queue();


extern int push_msg(MSG_QUEUE *q,CONN* c);


int empty_msg_queue( MSG_QUEUE *q);


int  get_msg(MSG_QUEUE *q ,MSG* temp_msg);


#endif /* MSGQUEUE_H_ */


消息隊(duì)列的實(shí)現(xiàn)文件 * msgqueue.c

/*
 * msgqueue.c
 *
 */


#include "msgqueue.h"


MSG_QUEUE* create_msg_queue()
{


MSG_QUEUE* qmsg=malloc(sizeof(MSG_QUEUE)); /*申請頭尾指針結(jié)點(diǎn)*/
if(qmsg==NULL){
fprintf(stderr, "create_msg_queue malloc error, errno: %d %m\n", errno);
return NULL;
}
MSG* msg=malloc(sizeof(MSG)); /*申請鏈隊(duì)頭結(jié)點(diǎn)*/
if(msg==NULL){
fprintf(stderr, "create_head_msg malloc error, errno: %d %m\n", errno);
free(qmsg);
return NULL;
}


msg->next=NULL;
qmsg->head=qmsg->tail=msg;
qmsg->size=0;
return qmsg;
}




 int  push_msg(MSG_QUEUE *q,CONN* c)
{
if(q->size>10240){
fprintf(stderr, "push_msg error,msg_queue size is over %d ,errno: %d %m\n",q->size, errno);
return -1;
}


MSG *msg;
msg=malloc(sizeof(MSG)); /*申請新結(jié)點(diǎn)*/
if(msg==NULL){
fprintf(stderr, "create_new_msg malloc error, errno: %d %m\n", errno);
return -1;
}
memcpy(msg->buf,c->in_buf,c->in_buf_len);
msg->buf_len=c->in_buf_len;
msg->c=c;
msg->next=NULL;
q->tail->next=msg;
q->tail=msg;
q->size++;


return 0;
}


int empty_msg_queue( MSG_QUEUE *q)
{
if (q->head==q->tail)
return 0;
else
return 1;
}




int  get_msg(MSG_QUEUE *q ,MSG* temp_msg)
{
if (q->head==q->tail){
return -1;
}
MSG *temp=q->head->next;
    if(q->head->next == q->tail) //如果要出隊(duì)的結(jié)點(diǎn)為最后一個(gè)結(jié)點(diǎn),使q->rear指向頭結(jié)點(diǎn)防止出現(xiàn)懸空的指針
        q->tail = q->head;


   // msg_buf = temp->buf; //將出隊(duì)的數(shù)據(jù)元素存入*e
    temp_msg->c=temp->c;
    memcpy(temp_msg->buf,temp->buf,temp->buf_len);
    temp_msg->buf_len=temp->buf_len;


    q->head->next = temp->next; //使下一個(gè)結(jié)點(diǎn)成為隊(duì)頭,如果沒有下一個(gè)結(jié)點(diǎn)則為NULL
q->size--;
//int buf_len=temp->buf_len;
    free(temp); //刪除要出隊(duì)的結(jié)點(diǎn)
return 0;


}

標(biāo)簽:

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:Java獲取本地IP方法

下一篇:Python批量更改圖片分辨率