ACE Service Configurator 架構(ACE Service Configurator Framework)http://hi.baidu.com/pass86/blog/item/52402fdb56024e65d1164eea.html
需要的靈活性:在運行時對你的應用進行不同的配置,從而使用不同的服務。 ACE Service Configurator 架構是Component Configurator 模式的一種實現。 配置靜態服務 靜態服務是代碼已經連結進可執行程式的服務。 核心: 1.你的服務類必須是ACE_Service_Object 的之類。 2.每個服務都需要實現以下掛鈎方法: virtual int init (int argc, ACE_TCHAR *argv[]), 架構會在這個服務的執行個體進行初始化時調用這個方法。 virtual int fini (void), 架構會在服務執行個體關閉時調用這個方法。 virtual int info (ACE_TCHAR **str, size_t len), 可選,服務用這個方法類報告關於自身的資訊。ACE把已知的、可配置的靜態服務放在一個內部倉庫中。每個靜態服務都必須用ACE提供一些宏把一些薄記資訊插入這個倉庫。被放在服務的.cpp檔案中。 初始化服務3步曲 ACE_FACTORY_DEFINE(CLS,SERVICE_CLASS) 協助建立和銷毀對象 CLS:你的程式/庫用來匯入/匯出聲明的標識符,若不需匯出到DLL,可使用ACE_Local_Service SERVICE_CLASS:從ACE_Service_Object派生的類的名稱,會在服務初始化時被執行個體化。
ACE_STATIC_SVC_DEFINE(SERVICE_VAR,NAME,TYPE,FACTORY,FLAGS,ACTIVE) 向倉庫登記服務所需全部資訊 SERVICE_VAR:建立的靜態對象的名稱 NAME:一個文本串。在服務組態檔中將使用該名稱來標識這個服務。不應包含空格。 TYPE:正在登記的物件類型。ACE_SVC_OBJ_T。 FACTORY:一個指標,指向用於建立服務物件執行個體的工廠函數。一般用ACE_SVC_NAME (SERVICE_CLASS)來產生。 FLAGS:指定在服務關閉時,怎樣處置與服務相關的對象。使用常用ACE_Service_Type::DELETE_THIS | ACE_Service_Type::DELETE_OBJ ACTIVE:1表示在程式啟動後啟用。0表示會根據設定檔中的指令進行初始化。
ACE_STATIC_SVC_REQUIRE(SERVICE_VAR) 確保在你的程式啟動時建立你的服務物件的一個執行個體,並向架構登記它。 SERVICE_VAR:建立的靜態對象的名稱 靜態服務的配置行的格式: static service-name [arguments] 啟動服務 ACE_STATIC_SVC_REGISTER(HA_Status_Descriptor);//HA_Status_Descriptor為建立靜態對象名稱 ACE_Service_Config::open (argc, argv, ACE_DEFAULT_LOGGER_KEY, 0); ACE_Service_Config::open()預設情況下會嘗試處理目前的目錄中名為svc.conf的檔案。 設定動態服務 動態服務可以從共用庫(DLL)中動態載入。 與靜態服務的過程區別: 1)動態服務類將駐留在共用庫(DLL)中,所以聲明服務類時(ACE_Service_Object派生的類)必須使用適當的匯出聲明。 2)只需要的宏:ACE_FACTORY_DEFINE |