回調函數(callback)理解

回調函數(callback)理解
問:什麼是回調函數,回調函數和鉤子函數的區別?
解釋:
A:回調函數就相當於一箇中斷處理函數,由系統在符合你設定的條件時自動調用。爲此,你需要做三件事:1,聲明;2,定義;3,設置觸發條件,就是在你的函數中把你的回調函數名稱轉化爲地址作爲一個參數,以便於系統調用。
聲明和定義時應注意:回調函數由系統調用,所以可以認爲它屬於WINDOWS系統。不要把它當作你的某個類的成員函數。
B:A說回調函數屬於WINDOWS系統。我覺得不應該說回調函數是屬於系統的。應該說是程序把這段代碼的觸發交由系統來做。而這種做法是WINDOWS提供的處理機制吧,因爲消息是系統一手掌握着的,由系統來調用我們的程序對消息的處理部分,這樣子會比較方便。不然我們又得花力氣去讀消息列表了。
C:我研習windows開發多年,認爲以上幾位的回答都是概念上的錯誤。我想先看看一般的函數爲什麼不是callback的吧。我們自己設計的函數往往是用來實現特定功能的函數,爲了實現一些功能,我們可能要在函數中調用操作系統提供的服務,例如textout(),我們的自己設計的函數是用來由我們的主程序調用的。這就是一般意義上的函數,如下所示:
void   fun1();   
  main()   
  {   
            .......;   
            fun1();   
            .......;   
  }   
  void   fun1()   
  {   
          .....   
          .....   
  }   
    你可以看到,在主程序中一定會有對我寫的函數的調用; 而callback函數與此不同,它不是由我們的主程序來調用的,它是爲操作系統準備的,也就是說,我們的主程序中絕對看不到對callback函數的調用,你想想,你肯定沒有見過在WinMain()中對winproc的調用。  
回調的意思就是反過來調用,因爲我們習慣了從我們的程序中調用操作系統的服務,卻對操作系統調用我們的函數不習慣,所以我們寫的爲操作系統調用的函數叫“回調”函數。
這類函數主要是我們爲WINDOWS編寫的窗口處理函數,當某個消息到達時,操作系統會調用我們寫的回調函數,所以我們看不到主程序中對回調函數的調用。

個人總結:回調函數是用戶提供給操作系統調用的,類似於中斷處理函數(ISR),由於Windows的中斷是由系統來處理的,所以當某個中斷髮生時,用戶要進行中斷服務就必須將中斷處理函數寫成回調函數。

轉:http://blog.chinaunix.net/space.php?uid=13485119&do=blog&id=101182

···

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章