天空之城
new,think,program,happy to live
posts - 39,comments - 39,trackbacks - 0
   Callback   Function:   回调函数  
          在侯sir的<<深入浅出>>中一开始就提出了这个概念,大概的提法是说回调函数是操作系统调用而你永远不要去调用的函数。这个提法让初学者有点望而生畏,以为是一种多么高深而难以领会的系统底层的核心技术。其实不然,这个技术本质很简单,而且很常用。它实质就是函数指针的基本运用(如果不知道什么是函数指针的话,翻翻书)。在一个模块中,有时想让一部分功能由其它模块实现,譬如说一个做显示的模块,它只想实现显示的资源配备,画面的刷新,缩放等,而把画具体实体(譬如圆、多边形)的代码放到别的模块来实现,怎么办呢?用函数指针。在自己的类中放一个画圆的函数指针,使用时由外部为这个函数指针赋值(其实就是指向了一个外部的函数),在自己的代码中直接调用这个函数指针来画就可以了(本模块完全不知道外部模块是怎么画圆的)。那个外部的函数在这里就是回调函数!  
          在很多系统API中就使用了这种函数回调的方法,让我们开发的代码实现可以嵌入到API的代码实现当中,其实我们就是传了一个函数地址给它而已。换句话说,这些API搭好了某些运行的代码框架,我们来为它具体实现。在自己的代码中这种技术也常常被用到。举个典型的例子,写COM(串口)读写代码时,常常单独实现一个模块来读写串口,而这个模块则开放一个回调函数接口,使得每读完若干字节数据(譬如说自定义通讯数据的一帧)就调用一次这个函数,而这个函数是由上层调用模块实现的,具体进行数据的解析、处理。这就是回调。这有什么好处呢?实现了功能的分离,这个串口模块会有良好的重用性。还不明白的话,请仔细想想:)  
   
          守护进程  
          这个概念我更拿不准了。好像这是指从系统开始一直到系统结束一直在运行,长驻内存的线程。譬如说Win32的很多服务进程,都可以称作守护进程。守护进程往往会获得较高的系统核心等级,使得不容易被kill掉。因其特点,一些病毒,监控程序往往实现为守护进程。当然,这绝不是把程序放到“启动”中可以实现的,那个时候启动,已经太晚。我猜想(没真正做过)要实现的话,可以注入到一些系统核心DLL里,一旦这些DLL启动时激活自己的进程,或者实现为Windows的服务进程,常规编程里很少使用到这个技术。
posted on 2006-05-14 12:58 太极虎~宏 阅读(111) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理