?? Callback ? Function: ? 回調函數 ?
? ? ? ? ? 在侯sir的<<深入淺出>>中一開始就提出了這個概念,大概的提法是說回調函數是操作系統調用而你永遠不要去調用的函數。這個提法讓初學者有點望而生畏,以為是一種多么高深而難以領會的系統底層的核心技術。其實不然,這個技術本質很簡單,而且很常用。它實質就是函數指針的基本運用(如果不知道什么是函數指針的話,翻翻書)。在一個模塊中,有時想讓一部分功能由其它模塊實現,譬如說一個做顯示的模塊,它只想實現顯示的資源配備,畫面的刷新,縮放等,而把畫具體實體(譬如圓、多邊形)的代碼放到別的模塊來實現,怎么辦呢?用函數指針。在自己的類中放一個畫圓的函數指針,使用時由外部為這個函數指針賦值(其實就是指向了一個外部的函數),在自己的代碼中直接調用這個函數指針來畫就可以了(本模塊完全不知道外部模塊是怎么畫圓的)。那個外部的函數在這里就是回調函數! ?
? ? ? ? ? 在很多系統API中就使用了這種函數回調的方法,讓我們開發的代碼實現可以嵌入到API的代碼實現當中,其實我們就是傳了一個函數地址給它而已。換句話說,這些API搭好了某些運行的代碼框架,我們來為它具體實現。在自己的代碼中這種技術也常常被用到。舉個典型的例子,寫COM(串口)讀寫代碼時,常常單獨實現一個模塊來讀寫串口,而這個模塊則開放一個回調函數接口,使得每讀完若干字節數據(譬如說自定義通訊數據的一幀)就調用一次這個函數,而這個函數是由上層調用模塊實現的,具體進行數據的解析、處理。這就是回調。這有什么好處呢?實現了功能的分離,這個串口模塊會有良好的重用性。還不明白的話,請仔細想想:) ?
? ?
? ? ? ? ? 守護進程 ?
? ? ? ? ? 這個概念我更拿不準了。好像這是指從系統開始一直到系統結束一直在運行,長駐內存的線程。譬如說Win32的很多服務進程,都可以稱作守護進程。守護進程往往會獲得較高的系統核心等級,使得不容易被kill掉。因其特點,一些病毒,監控程序往往實現為守護進程。當然,這絕不是把程序放到“啟動”中可以實現的,那個時候啟動,已經太晚。我猜想(沒真正做過)要實現的話,可以注入到一些系統核心DLL里,一旦這些DLL啟動時激活自己的進程,或者實現為Windows的服務進程,常規編程里很少使用到這個技術。
posted on 2006-05-14 12:58
太極虎~宏 閱讀(129)
評論(0) 編輯 收藏 引用