女人夜夜春高潮爽A∨片传媒_国产精品VIDEOS麻豆_在线精品亚洲一区二区三区_亚洲熟妇无码av

編程代碼
新聞詳情

一文讀懂回調函數

發布時(shi)間:2020-09-05 14:50:00 最后更新(xin):2020-11-23 14:35:51 瀏覽(lan)次數:3720

1 什么是回(hui)調函(han)數?

首先什么是“回調”呢?

我的(de)(de)理解是(shi):把一段可執(zhi)行的(de)(de)代碼(ma)像(xiang)參數(shu)傳(chuan)遞那樣傳(chuan)給其他代碼(ma),而這段代碼(ma)會在某(mou)個時刻被調用執(zhi)行,這就叫做(zuo)回調。

如(ru)(ru)果代碼立即被執(zhi)行就稱為同步回(hui)調(diao),如(ru)(ru)果過后(hou)再執(zhi)行,則稱之為異步回(hui)調(diao)。

回(hui)調(diao)函(han)數(shu)就(jiu)(jiu)是(shi)一(yi)個通過(guo)函(han)數(shu)指針調(diao)用(yong)(yong)的函(han)數(shu)。如(ru)果你把(ba)函(han)數(shu)的指針(地址)作為(wei)參數(shu)傳(chuan)遞給另一(yi)個函(han)數(shu),當這(zhe)個指針被用(yong)(yong)來調(diao)用(yong)(yong)其所(suo)指向的函(han)數(shu)時,我們就(jiu)(jiu)說(shuo)這(zhe)是(shi)回(hui)調(diao)函(han)數(shu)。

回(hui)調函數(shu)不(bu)是由(you)該函數(shu)的實現方(fang)直接調用(yong)(yong),而(er)是在(zai)特定的事(shi)件或條件發生(sheng)時由(you)另外(wai)的一方(fang)調用(yong)(yong)的,用(yong)(yong)于對該事(shi)件或條件進行(xing)響應。

2 為(wei)什么要(yao)用回調函數?

因為可以把調(diao)(diao)用(yong)者(zhe)與被(bei)調(diao)(diao)用(yong)者(zhe)分開,所以調(diao)(diao)用(yong)者(zhe)不關心誰是(shi)被(bei)調(diao)(diao)用(yong)者(zhe)。它只需知道(dao)存(cun)在一(yi)個具有特定原(yuan)型和限制條件的被(bei)調(diao)(diao)用(yong)函(han)數。

簡而言之,回(hui)調函數就是(shi)允許用戶把需(xu)要(yao)調用的方法的指針(zhen)作為參(can)數傳遞給一個(ge)函數,以便該函數在處(chu)理相似事件的時候可以靈活的使用不同(tong)的方法。

回調似乎只是(shi)函數間的調用,和(he)普通函數調用沒啥區別。

但(dan)仔細看,可以發(fa)現兩者之間的一個關鍵的不同(tong):在(zai)回(hui)(hui)調中,主程序(xu)把回(hui)(hui)調函數(shu)像參數(shu)一樣傳(chuan)入庫(ku)函數(shu)。

這樣(yang)一來,只要我們(men)改變傳進(jin)庫函數(shu)的(de)參數(shu),就可以(yi)實現不(bu)同的(de)功能(neng),這樣(yang)有沒有覺得(de)很靈活?并且當庫函數(shu)很復(fu)雜或者不(bu)可見的(de)時候利用回調函數(shu)就顯得(de)十分優秀(xiu)。

3 怎么使用回調函數(shu)?

如上述(shu)代碼:可(ke)以看到,Handle()函(han)數(shu)(shu)(shu)里面的(de)參(can)數(shu)(shu)(shu)是(shi)一(yi)個指(zhi)針(zhen),在main()函(han)數(shu)(shu)(shu)里調用Handle()函(han)數(shu)(shu)(shu)的(de)時候,給(gei)它傳入(ru)了函(han)數(shu)(shu)(shu)Callback_1()/Callback_2()/Callback_3()的(de)函(han)數(shu)(shu)(shu)名(ming),這時候的(de)函(han)數(shu)(shu)(shu)名(ming)就是(shi)對應函(han)數(shu)(shu)(shu)的(de)指(zhi)針(zhen),也就是(shi)說,回調函(han)數(shu)(shu)(shu)其實就是(shi)函(han)數(shu)(shu)(shu)指(zhi)針(zhen)的(de)一(yi)種用法。

4 回調函數實例(很(hen)有用)

一個GPRS模(mo)塊(kuai)聯網(wang)(wang)(wang)的(de)小項目(mu),使用(yong)過(guo)的(de)同(tong)學大概知道(dao)2G、4G、NB等(deng)模(mo)塊(kuai)要想實現無線聯網(wang)(wang)(wang)功能(neng)都需要經(jing)歷模(mo)塊(kuai)上電(dian)初始化、注(zhu)冊(ce)網(wang)(wang)(wang)絡(luo)、查詢網(wang)(wang)(wang)絡(luo)信(xin)息質量、連接服務器等(deng)步驟,這(zhe)里的(de)的(de)例子就是(shi),利(li)用(yong)一個狀(zhuang)態(tai)機(ji)函數(根據不(bu)同(tong)狀(zhuang)態(tai)依(yi)次調(diao)用(yong)不(bu)同(tong)實現方法的(de)函數),通過(guo)回調(diao)函數的(de)方式依(yi)次調(diao)用(yong)不(bu)同(tong)的(de)函數,實現模(mo)塊(kuai)聯網(wang)(wang)(wang)功能(neng),如下:

所以,如果有人想做個NB模塊聯網(wang)項目(mu),可(ke)以copy上面的框(kuang)架,只需要修改回調函(han)數內部的具體(ti)實現(xian),或者增(zeng)加、減少回調函(han)數,就可(ke)以很簡(jian)潔快速的實現(xian)模塊聯網(wang)。

推薦閱讀(du)

C/C++函(han)數(shu)指(zhi)針(zhen)與指(zhi)針(zhen)函(han)數(shu)

C語言指針詳解

在線客服
客服電話
  • 0755-23712116
  • 13310869691