linux c 迴圈訊息佇列寫法

2021-08-11 12:28:34 字數 957 閱讀 1699

很多場合,我們需要乙個迴圈訊息處理模式,乙個執行緒產生訊息,乙個執行緒進行處理。產生訊息的執行緒就不用阻塞了,可以用了幹其他的事情了。常見串列埠或者網路通訊,負責解析位元組流的執行緒將訊息初步解析然後放置到乙個訊息佇列裡面,處理執行緒負責迴圈取出訊息佇列裡面的訊息進行相應的動作。下面是一在liunx下乙個基本實現框架:

typedef struct message

void init(const char *m,const char * r)

}else

if(r && strlen(r)>0)

}else

}void free()

}message;

//訊息佇列

typedef struct msg_list

void push(message m)

message pop()

else

}while(!get);

return message;

}}msg_list;

msg_list g_messages;

//消費者執行緒

void * msg_handle_thr(void * arg)

type = json_helper_get_int(msg_obj, "type",-1);

if(2 == type)

}else if(1 == type)}}

else

con:

if(msg_obj != null && !is_error(msg_obj))

json_helper_put_safe(msg_obj);

#endif

} m.free(); }

return null;

}//生產者執行緒

void recive_msg(const char* msg,const char*res)

linux C 程序間通訊 訊息佇列

linux 引入訊息佇列的原因是,實現對緊急事件的處理。可以為訊息設定優先順序 下面是乙個共享訊息佇列的例子,在linux2.6的核心中能夠執行,通過訊息佇列實現程序間的通訊,可以自己選擇優先順序,本列優先順序設定為子程序自己的pid.2.6中能夠執行,include include include...

linux c 程序通訊之訊息佇列

訊息佇列是乙個存放在核心中的訊息鍊錶,每個訊息佇列由佇列識別符號標識,與管道不同的是訊息佇列是放在核心當中,只有在核心重啟,或者顯式的刪除乙個訊息佇列,該訊息佇列才會被真正的刪除,以下會有幾個操作,1.建立訊息佇列 include include key t ftok const char path...

Linux C程式設計 訊息佇列實現同時通訊

訊息佇列實現同時通訊 unix早期通訊機制之一的訊號能夠傳送的資訊量有限,管道則只能傳送無格式的位元組流,這無疑會給應用程式開發帶來不便。訊息佇列 也叫做報文佇列 則克服了這些缺點。訊息佇列就是乙個訊息的鍊錶.可以把訊息看作乙個記錄,具有特定的格式.程序可以向中按照一定的規則新增新訊息 另一些程序則...