日期:2014-05-16  浏览次数:20837 次

发散式的函数调用组织形式------从apache的挂钩机制中得到的启示

apache利用挂钩(hook)来实现系统的灵活性和可扩展性,内部是使用函数指针来实现的,其实现方式与我前面写的某网游服务端的注册回调机制是一样的。这种结构打破了传统的函数调用的执行流程,任一个步骤都可以进行扩展,而且每个模块还可以保持自己内部的层次化和模块化。

c来模拟C++多态的实现?
程序最终都是以机器码运行的,汇编是机器码的符号映射,所以汇编语言的描述能力和高级语言是一样的,所以C语言的描述能力和C++是一样的,即用C++能解决的问题用C肯定可以实现,当然其实现的难度是不一样的。这样的话,C++里面的虚函数如何用C来模拟呢?虚函数实现了C++的多态性,即实现了动态绑定,其实C也可以实现。基本的思路是:原本C程序中是函数调用函数(本质是汇编的jmp 和ret),这里假设是A调用B,现在将被调用的函数B不指定为具体的地址,而是在别处注册,这样A中调用B时实际执行的指令是在别处指定的,这个被指定的B的地址就是B的真正实现的地方。在C语言中,这种机制可以用函数指针来实现。


c怎么实现基于消息的异步的编程?
定义一些事件,在某个事件发生时执行一些操作,这是典型的基于消息的编程模式,windows中的程序都是这样实现的,所以windows编程中都会涉及消息队列、控件句柄、回调函数等概念。windows中的Dialog的消息映射机制在C中如何实现呢?实际上很简单,还是利用函数指针。在每个控件上设一个map,map的key是事件,map的value就是这个事件发生时所作的事情。在相应函数内部维护一个数组,里面的每一项都是对这个事件感兴趣的处理单元(某处的回调函数),这样某个事情发生时(如鼠标左键按下)就找到相应事件的总入口,进入入口后分别调用相应的处理模块就可以了。由于是采用数组,别处可以很方便的注册自己,(只要将相应的函数指针添加进数组就可以了),模块注册的过程实际上就是相应功能组装的过程。

?