回呼函數聽起來是個非常專業的名稱,讓人產生一種敬畏的感覺。這裡試圖做一個說明,如果沒有看懂,原因只是我的表達能力,而非你的理解能力。
1、回呼函數是什嗎?從c的角度來看,回呼函數從基本上,是一個指標,更確切的說,是一個函數指標。
2、回呼函數用來做什嗎?既然它是一個函數指標,那麼顯然,函數指標用來做什麼,回呼函數自然可以有一份。更進一步,指標用來做什麼的,函數指標也有一份。3、為什麼要使用回呼函數?和為什麼要使用指標一樣,使用回呼函數的主要目的是為了達到所謂的“靈活性”。
4、回呼函數的使用場合既然是函數,那麼必然有實現的地方和調用的地方。回呼函數調用的地方應該大多數是提供服務的代碼群。如基礎介面提供者。反之,回調實現的地方大部分是使用服務的代碼群。如應用介面實現者。回呼函數在可視化控制項的開發中有大量的使用,windows本身也大量使用了回呼函數。
5、例子比比皆是。比如通用的按鍵控制,其按鍵實現的代碼中有如何畫按鍵,如何在滑鼠按下時顯示一個向下的動作,如在需要隱藏的時候訊息,這些都是按鍵控制自身實現的代碼,是否隱藏作為一個屬性,由調用者設定,按鍵控制的代碼根據調用者設定的不同屬性,採用不同的行為。
自然,調用者使用按鍵不是為了設定它的屬性來玩的,調用者是為了做事情的,那麼非常顯然的,調用者希望在按鍵按下時完成一些事情,比如開始格式化硬碟,這些代碼當然由調用者來寫,問題在於如何讓調用者知道按鍵被按下了?
方法1:設定屬性,由調用者自己查看。在按鍵屬性中增加一個是否按下的屬性,這個屬性和其他屬性不同,是由按鍵控制本身的代碼來操作的,當使用者按下按鍵,那麼這個屬性改變。調用者定時或者偶然查看這個屬性,再決定自己的行為。如果把調用者看做領導,按鍵控制看做部下,那麼這樣的部下顯然無法讓領導滿意,冒號們已經很忙了,還要不斷抽時間四處查閱屬下?
方法2:發訊息。既然按鍵控制不應該消極怠工,那麼無論有什麼事情就趕緊彙報吧。向調用者發送一個訊息開起來是很勤快的做法。可是冒號還是不滿意,不滿意的地方在於按鍵控制仍然缺乏主動性,只是簡單的把訊息一發送,就不管不顧了,剩下的事情全交給領導,真不知道到底誰是領導了。雖然現在欠債的是大爺,可領導永遠是領導。
方法3:回呼函數。領導需要布置任務,比如稅務局的來了財務的趕緊給假賬本,研發的就一問三不知。對於按鍵來說,這個按鍵按下和那個按鍵按下自
然分工也不同,按鍵提供一個回呼函數來接受指令,按下時是趕緊給假賬本還是一問三不知,全有調用者說了算。按鍵必須保證在按鍵按下時,這些指令,也就是回
調函數得到恰當的運行。