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() 来实现。