ACE Block Message功能介紹

2021-05-27 14:00:10 字數 2120 閱讀 4729

ace_message_block在ace中用來表示訊息的存放空間,可用做網路通訊中的訊息緩衝區,使用非常頻繁,下面將在如下方簡單的介紹一下ace_message_block相關功能。

建立訊息塊

釋放訊息塊

從訊息塊中讀寫資料

資料的拷貝

其它常用函式

1。建立訊息塊

建立訊息塊的方式比較靈活,常用的有以下幾種方式 :

1。直接給訊息塊分配記憶體空間建立。

ace_message_block *mb = new ace_message_block (30);

2。共享底層資料塊建立。

char buffer[100];

ace_message_block *mb = new ace_message_block (buffer,30);

這種方式共享底層的資料塊,被建立的訊息塊並不拷貝該資料,也不假定自己擁有它的所有權。在訊息塊mb被銷毀時,相關聯的資料緩衝區data將不會被銷毀。這是有意義的:訊息塊沒有拷貝資料,因此記憶體也不是它分配的,這樣它也不應該負責銷毀它。

3。通過duplicate()函式從已有的訊息塊中建立副本。

ace_message_block *mb = new ace_message_block (30);

ace_message_block *mb2 = mb->duplicate();

這種方式下,mb2和mb共享同一資料空間,使用的是ace_message_block的引用計數機制。它返回指向要被複製的訊息塊的指標,並在內部增加內部引用計數。

4。通過clone()函式從已有的訊息塊中複製。

ace_message_block *mb = new ace_message_block (30);

ace_message_block *mb2 = mb->clone();

clone()方法實際地建立整個訊息塊的新副本,包括它的資料塊和附加部分;也就是說,這是一次"深拷貝"。

2。釋放訊息塊

一旦使用完訊息塊,程式設計師可以呼叫它的release()方法來釋放它。

如果訊息資料記憶體是由該訊息塊分配的,呼叫release()方法就也會釋放此記憶體。

如果訊息塊是引用計數的,release()就會減少計數,直到到達0為止;之後訊息塊和與它相關聯的資料塊才從記憶體中被移除。

如果訊息塊是通過共享已分配的底層資料塊建立的,底層資料塊不會被釋放。

無論訊息塊是哪種方式建立的,只要在使用完後及時呼叫release()函式,就能確保相應的記憶體能正確的釋放。

3。從訊息塊中讀寫資料

ace_message_block提供了兩個指標函式以供程式設計師進行讀寫操作,rd_ptr()指向可讀的資料塊位址,wr_ptr()指向可寫的資料塊位址,預設情況下都執行資料塊的首位址。下面的例子簡單了演示它的使用方法。

#include

"ace/message_queue.h"

#include

"ace/os.h"

int main(int argc, char *argv)

注意:這兩個指標所指向的位置並不會自動移動,在上面的例子中,函式執行完畢後,執行的位置仍然是最開始的0,而不是最新的可寫位置5,程式設計師需要通過wr_ptr(5)函式手動移動寫指標的位置。

4。資料的拷貝

一般的資料的拷貝可以通過函式來實現資料的拷貝,copy()還會保證wr_ptr()的更新,使其指向緩衝區的新末尾處。

下面的例子演示了copy()函式的用法。

mb->copy("hello");

mb->copy("123",4);

注意:由於c++是以'\0'作為字串結束標誌的,對於上面的例子,底層資料塊中儲存的是"hello\0123\0",而用ace_os::printf("%s\n",mb->rd_ptr ());列印出來的結果是"hello",使用copy函式進行字串連線的時候需要注意。

5。其它常用函式

length()    返回當前的資料長度

space()    獲取剩餘可用空間大小

size()    獲取和設定資料儲存空間大小。

微軟Expression Blend功能介紹

microsoft expression blend 乙個全新的,全功能的職業設計工具,用於創造基於microsoft windows平台的豐富 複雜的應用介面。使用 expression blend,可以提供更出色的應用軟體並提公升客戶的體驗和滿意度。expression blend 包括了與mi...

VARCHART XGantt教程之功能介紹

甘特圖允許顯示和計畫任務的時間順序以及資源的能力。由於他們的圖形視覺化,相互關係和變化一目了然。除了在專案管理中,建立了甘特圖最重要的是製造控制面板和資源系統管理和處置。varchart xgantt是乙個簡單易用的互動式圖形元件在短時間內整合到您自己的應用程式中,因為沒有耗時的圖形程式設計。由於種...

汽車功能安全ISO 26262介紹

道路車輛功能安全規範 iso26262是由iso國際標準化組織聯合iec國際電工協會共同制定的,源於電子 電氣及可程式設計器件功能安全基本標準iec61508 主要定位在汽車行業中特定的電氣器件 電子裝置 可程式設計電子器件等專門用於汽車領域的部件,旨在提高汽車電子 電氣產品功能安全,使人們對於安全...