,题目有点哗众取宠,不过称之为巨兽也不为过吧。
看了蛮长时间的ACE了,一直没怎么用,最近正好有机会需要实现SMGP协议,所以就想使用ACE来练练手。协议很简单,在此就不多说了,主要是ACE应用的问题,可能对一些高手不算什么问题,但是对初次使用者来说应该还是有些帮助吧。
我的想法是通过提供静态的LIB库和头文件来提供一个基本的API接口,即ACE.lib->SMGP.lib->*.exe。
首先要进行ACE的全局初始化,ACE将入口函数main宏定义成ace_main_i,所以在程序运行时,首先会进入的就是ace_main_i函数,如果不是的话,在对系统的一些操作就会出错。
如果你编译的是静态lib库的话,需要定义ACE_AS_STATIC_LIBS宏,有的时候在使用模板参数的时候会碰到编译报错说模板参数个数不匹配,这时候需要看是否定义了ACE_HAS_TEMPLATE_TYPEDEFS宏,这个宏会造成模板参数的个数申明不一样。
在使用定时器的时候,反应器(ACE_Reactor)的所有者必须和最终处理定时信号的线程相一致。例如,如果在主线程中初始化了反应器实例,而在另外一个线程中对反应器注册了定时器,那么这个定时器最终是不会工作的,只有在要求定时器的线程中指定反应器的所有者为当前线程,这样定时器才会生效。
注意LOCK与SYNCH的区别,各自适用什么样的场合,不要搞混淆了。