熱線電話:0755-23712116
郵箱:contact@shuangyi-tech.com
地址:深圳市寶安區(qū)沙井街道后亭茅洲山工業(yè)園工業(yè)大廈全至科技創(chuàng)新園科創(chuàng)大廈2層2A
我的理解是:把一段可執(zhí)行的代碼像參數(shù)傳遞那樣傳給其他代碼,而這段代碼會在某個時刻被調用執(zhí)行,這就叫做回調。
如果代碼立即被執(zhí)行就稱為同步回調,如果過后再執(zhí)行,則稱之為異步回調。
回調函數(shù)就是一個通過函數(shù)指針調用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個函數(shù),當這個指針被用來調用其所指向的函數(shù)時,我們就說這是回調函數(shù)。
回調函數(shù)不是由該函數(shù)的實現(xiàn)方直接調用,而是在特定的事件或條件發(fā)生時由另外的一方調用的,用于對該事件或條件進行響應。
因為可以把調用者與被調用者分開,所以調用者不關心誰是被調用者。它只需知道存在一個具有特定原型和限制條件的被調用函數(shù)。
簡而言之,回調函數(shù)就是允許用戶把需要調用的方法的指針作為參數(shù)傳遞給一個函數(shù),以便該函數(shù)在處理相似事件的時候可以靈活的使用不同的方法。
回調似乎只是函數(shù)間的調用,和普通函數(shù)調用沒啥區(qū)別。
但仔細看,可以發(fā)現(xiàn)兩者之間的一個關鍵的不同:在回調中,主程序把回調函數(shù)像參數(shù)一樣傳入庫函數(shù)。
這樣一來,只要我們改變傳進庫函數(shù)的參數(shù),就可以實現(xiàn)不同的功能,這樣有沒有覺得很靈活?并且當庫函數(shù)很復雜或者不可見的時候利用回調函數(shù)就顯得十分優(yōu)秀。
如上述代碼:可以看到,Handle()函數(shù)里面的參數(shù)是一個指針,在main()函數(shù)里調用Handle()函數(shù)的時候,給它傳入了函數(shù)Callback_1()/Callback_2()/Callback_3()的函數(shù)名,這時候的函數(shù)名就是對應函數(shù)的指針,也就是說,回調函數(shù)其實就是函數(shù)指針的一種用法。
一個GPRS模塊聯(lián)網(wǎng)的小項目,使用過的同學大概知道2G、4G、NB等模塊要想實現(xiàn)無線聯(lián)網(wǎng)功能都需要經(jīng)歷模塊上電初始化、注冊網(wǎng)絡、查詢網(wǎng)絡信息質量、連接服務器等步驟,這里的的例子就是,利用一個狀態(tài)機函數(shù)(根據(jù)不同狀態(tài)依次調用不同實現(xiàn)方法的函數(shù)),通過回調函數(shù)的方式依次調用不同的函數(shù),實現(xiàn)模塊聯(lián)網(wǎng)功能,如下:
所以,如果有人想做個NB模塊聯(lián)網(wǎng)項目,可以copy上面的框架,只需要修改回調函數(shù)內部的具體實現(xiàn),或者增加、減少回調函數(shù),就可以很簡潔快速的實現(xiàn)模塊聯(lián)網(wǎng)。
C/C++函數(shù)指針與指針函數(shù)
C語言指針詳解
熱線電話:0755-23712116
郵箱:contact@shuangyi-tech.com
地址:深圳市寶安區(qū)沙井街道后亭茅洲山工業(yè)園工業(yè)大廈全至科技創(chuàng)新園科創(chuàng)大廈2層2A