ACE_Task

ACE_Task是ACE中的任務或主動對象“處理結構”的基類。

基本介紹

  • 中文名:ACE_Task
  • 外文名:ACE_Task
概述,步驟,實例,框架,

概述

ACE_Task是ACE中的任務或主動對象“處理結構”的基類。ACE使用此類來實現主動對象模式。所有希望成為“主動對象”的對象都必須由此類派生。同時可將它看作是更高級的、更為面向對象的執行緒。
ACE_Task處理的是對象,因此更有利於構造OO程式,產生更好的OO軟體,而且,它還包括了一種用於
與其他任務通信的易於使用的機制。
ACE_Task可用作:
<1>更高級的執行緒(常稱其為任務)
<2>主動對象模式中的主動對象
PS.ACE任務:
每個任務都含有一或多個執行緒,以及一個底層訊息佇列。各個任務通過訊息佇列進行通信。至於訊息佇列實現的內在細節程式設計師不必關注。傳送任務用putq() 將訊息插入到另一任務的訊息佇列中,接收任務通過使用getq()將訊息提取出來。這樣的體系結構大大簡化了多執行緒程式的編程模型。

步驟

從ACE_Task類派生的子類應實現以下業務邏輯:
<1>實現服務初始化和終止方法。
open()方法應該包含所有專屬於任務的初始化代碼。其中可能包括諸如連線控制塊、鎖和記憶體這樣的資源。close()方法用於終止。
<2>調用啟用(Activation)方法。
在主動對象實例化後,必須通過調用activate()啟用它。要在主動對象中創建的執行緒數目及其它參數,被傳遞給activate()方法。它將使svc()方法成為所有它生成的執行緒的啟動點。
<3>實現服務專有的處理方法。
在主動對象被啟用後,各個新執行緒在svc() 方法中啟動。程式設計師必須在子類中定義此方法。

實例

//消費者類定義
#i nclude "ace/OS.h"
#i nclude "ace/Task.h"
#i nclude "ace/Message_Block.h"
//The Consumer Task.
class Consumer :
public ACE_Task<ACE_MT_SYNCH>
{
public:
int open(void*)
{
ACE_DEBUG((LM_DEBUG, "(%t) Producer task opened \n"));
//Activate the Task
activate(THR_NEW_LWP,1);
return 0;
}
//The Service Processing routine
int svc(void)
{
//Get ready to receive message from Producer
ACE_Message_Block * mb = 0;

相關詞條

熱門詞條

聯絡我們