ACE中的主動對象模式(Active Object Pattern)

來源:互聯網
上載者:User

被動對象就是一般情況下在那兒放著不會動,等待著別的執行線程調用,然後才會執行。主動對象一般自己包含執行線程,可以主動的執行代碼。

 

1.主動對象是基於ACE_Task類的,它提供執行線程的。

 

2.當某些要執行的代碼想被執行時,要放入某個隊列,然後執行線程發現隊列不空時就從這個隊列裡面取出這個隊列中的對象,然後執行。這個隊列就是ACE_Activation_Queue。

 

3.放在ACE_Activation_Queue中的對象被稱為方法對象,這些對象都是繼承於ACE_Method_Object,ACE_Method_Object提供了一個名字為call的虛函數(它只有三個函數,另外兩個是一個構造和一個析構),實現自己的方法對象的call函數,然後可以在主動對象的svc函數(繼承自ACE_Task類)中調用。

4.若要得到非同步作業的結果,還需要ACE_Future對象,當非同步執行完畢後,執行線程會設定該對象,如果還沒有設定之前就想取得它裡面的結果,則會阻塞,直到被設定為止。

所以,它的流程就是這樣的:

(1) 建立一個Active Object對象,然後調用它的open函數(在open中調用activate,接著svc會被調用)。

(2) 在主動對象的裡面迴圈調用ACE_Activation_Queue的dequeue()函數,如果ACE_Activation_Queue中沒有方法對象,則會阻塞。

(3) 某個時候如果在ACE_Activation_Queue中存在方法對象,則該函數就會被順利執行通過,並且它返回方法對象的指標,然後就可以調用這個方法對象的call函數。

這樣,這個方法對象就會被順利執行了。

 

在使用主動對象的時候,它也就是將某個方法對象初始化之後,放入ACE_Activation_Queue中,然後其它的事情就由上面的步驟來完成了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.