Maxiee的Vim入门日记(6)——用Vim看aMule代码2

昨天在 Maxiee的Vim入门日记(5)——用Vim看aMule代码 里,Maxiee分析了wxSingleInstanceChecker这个类型,从中感受到了Vim强大的功能,看代码效率确实提高很多!今天Maxiee继续分析amule.h文件,因为里面的宏定义安排的很巧妙,值得学习。
 
打开amule.h,往下翻一点,就会遇到一块宏定义:
 

 
这个块的逻辑是,如果定义了AMULE_DEAMON,就让AMULE_APP_BASE代表wxAppConsole;如果没有定义呢,就让AMULE_APP_BASE代表wxApp。同时,一个似乎叫核心定时器周期宏也代表这不同的值。
 
这个AMULE_DEAMON到底是什么呢?DEAMON这个词,Maxiee在鸟哥的私房菜里看到过,叫守护进程,就是在后台运行的。
 
昨天就已经查到过,aMule采用一套代码,可以编译出功能不同的多个软件:
  • amule(伺服器/用户端)- aMule 的 桌面程式
  • amuled(伺服器)- 后台程序,可配合 amulecmd 或 amulegui 使用
  • amulegui(用户端)- 在图形介面下使用
其中这个amuled,不就是amule deamon嘛!所以说,要编译后台运行的deamon,我们就采用这个定义就好。
 
照这么说,amule和amulegui也会有相应的宏了?Maxiee赶紧在Vim里往下翻:
 

 
立刻又碰到了这么一块宏:通过宏定义的不同,IsDeamon和IsRemoteGui这两个函数的内容也会不同!宏定义真是个巧妙啊。Maixee仔细分析看:
开头有注释“Who am I”,我是谁?是说要编译的是哪种程序。
IsDeamon():我是不是Deamon呢?
如果定义了AMULE_DEAMON,那我就回答说是
否则,我就说我不是Deamon
IsRemoteGui():同理
如果定义了CLIENT_GUI,那我就是纯GUI程序
否则,我就不是
有了Deamon,有了Remote GUI,那么amule呢?最关键的怎么没了?
两个都不是,那不就是amule嘛!
……
 
amule最基本的类是CamuleAppCommon,不管是Deamon、Gui还是amule,都要继承它,这三个程序因为功能不同,还各自实现了各自的类,用了C++的多重继承,最终,这三个类是这样的:
 

 
(这个位于amule-remote-gui.h中)

 

 
Maixee发现,这三者都有DECLARE_APP(XXXX),在wxWidget中,这是一个宏,大概是指定程序运行时执行的类。下面还有一个指针,不论我们编译的是哪种类型,theApp都代表当前的程序。
 
通过宏定义,amule就能用一套程序,编出三个执行程序来,很巧妙,Maxiee今天又学了一招哈O(∩_∩)O~~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值