Applications with POCO
1、POCO應用程序框架,支持以下幾種需求:
(1)命令行參數處理;(2)配置文件;(3)初始化和關閉;(4)日誌。
2、POCO支持以下兩種類型的應用程序:命令行應用程序和服務器應用程序。
Application Subsystems
3、一個應用程序由不同的subsystems組成;
Subsystems可以幫助我們初始化和關閉應用程序;
當應用程序被初始化後,所有註冊的subsystems也被初始化;
當應用程序被關閉後,所有註冊的subsystems也被關閉;
The Subsystem Class (Subsystem類)
4、Subsystems必須通過實現一個Poco::Util::Subsystem的子類;
const char* name() const 返回子系統名稱
void initialize(Application& app) 初始化子系統
void uninitialize(Application& app) 關閉子系統
void reinitialize(Application& app) 重新配置子系統
5、void defineOptions(OptionSet& options) 允許一個subsystem去定義它自己的命令行參數
如果一個subsystem想去定義它自己的命令行參數,必須實現其成員函數
爲了有效的處理選擇參數,一個subsystem應該去綁定參數到配置屬性中或者確定一個返回值去處理選擇的參數
然而,選擇的參數將傳遞給handleOption()成員函數,你可能不知道怎麼去處理它。
Command Line Applications(命令行應用程序)
6、命令行應用程序通過創建一個Poco::Util::Application的子類來實現
應用程序是一個Subsystem的子類
有一些虛成員函數,可以重載
可以從Subsystem中已經知道有以下函數:
void initialize(Application& self)
void reinitialize()
void uninitialize()
void defineOptions()
7、int main(const std::vector<std::string>& args)
應用程序的入口, args vector包含所有選擇的還未處理的命令行參數。
應用程序包括一些退出代碼,如EXIT_OK, EXIT_USAGE等。
Server Applications
8、Server applications 通過創建Poco::Util::ServerApplication的子類來實現。
Poco::Util::ServerApplication也是Poco::Util::Application的子類。
9、服務器應用程序可以以命令行形式作爲Windows服務程序或Unix守護程序運行
10、通常情況下,一個服務器程序可以以一個後臺線程運行。因此,main()將啓動
一個線程,然後等待一個外在的請求去中止運行應用程序(waitForTerminationRequest())。
Configuration Files
11、默認創建兩個配置文件:
writable MapConfiguration, PRIO_APPLICATION
readonly SystemConfiguration, PRIO_SYSTEM
12、在啓動後,一個叫作APP的應用程序會去尋找文件
named APP(d).{xml,ini,properties}
void MyApplication::initialize(Application& self)
{
loadConfiguration(); // load default configuration files
Application::initialize(self);
}
Command Line Options
13、應用程序可以定義和處理命令行參數。
14、命令行參數依據平臺的不同,經常有以下格式寫法:
> /option or /option=value on Windows
> -o, -ovalue, --option or --option:value on Unix
Defining Options
15、Options通過OptionSet::addOption()添加它們;
16、通過重載虛函數defineOptions() 來實現。