最近在看文章 ,被回調(diào)函數(shù)給難住了,以往都是函數(shù)的調(diào)用,這個(gè)回調(diào)又是啥意思,于是果斷度娘,網(wǎng)上講的其實(shí)挺專(zhuān)業(yè)的,有興趣的童鞋可以自行百度,但是太專(zhuān)業(yè)了,有時(shí)候也比較迷糊,比如他會(huì)講到回調(diào)函數(shù)主要是靠函數(shù)指針來(lái)實(shí)現(xiàn)的,度娘大概的舉的一個(gè)很經(jīng)典例子如下:
假如你去商店買(mǎi)醋,結(jié)果到了以后售貨員告知你賣(mài)光了,本來(lái)你打算就此回家的,售貨員又講,要不你把電話留下,等一來(lái)貨,我給你打電話,你再來(lái)取貨,于是你回家了,剛吃完午飯就來(lái)電話了,你又騎車(chē)去商店把醋買(mǎi)了,在這個(gè)過(guò)程中,你騎車(chē)去商店買(mǎi)醋等等一些列動(dòng)作被封裝成了函數(shù),這個(gè)函數(shù)的名叫售貨員來(lái)電,這個(gè)函數(shù)就是所謂的回調(diào)函數(shù)。
什么是函數(shù)調(diào)用?
非標(biāo)準(zhǔn)答案:函數(shù)的調(diào)用很好理解,以我們裸奔的main函數(shù)為例,在程序中你會(huì)調(diào)用各種各樣的函數(shù),也就是你定義的函數(shù)你調(diào)用,或者是別人定義的函數(shù)或者封裝的函數(shù)庫(kù)你直接拿來(lái)調(diào)用,這都叫函數(shù)調(diào)用。
什么是函數(shù)回調(diào)?
非標(biāo)準(zhǔn)答案:參考上面的main函數(shù)為例,那是一個(gè)完整的可執(zhí)行的代碼,而函數(shù)的回調(diào)往往是在一個(gè)半成品的代碼,也就是main函數(shù)中定義了一個(gè)函數(shù)指針或者函數(shù)聲明,但是沒(méi)有函數(shù)的實(shí)現(xiàn)(即定義),函數(shù)的定義由別人提供,那么對(duì)于提供代碼的人來(lái)講,需要提供的函數(shù)叫回調(diào)函數(shù),對(duì)于代碼中需要執(zhí)行該函數(shù)的操作叫做函數(shù)的回調(diào)。
總結(jié)一下:函數(shù)的使用和定義都是由一個(gè)人完成的,這個(gè)函數(shù)叫做調(diào)用函數(shù)(或者就是函數(shù)),加入函數(shù)的定義和使用是由兩個(gè)人完成的,一個(gè)只負(fù)責(zé)定義函數(shù),一個(gè)只負(fù)責(zé)調(diào)用函數(shù),那么這個(gè)函數(shù)叫做是回調(diào)函數(shù)。
在我們GUI系統(tǒng)回調(diào)函數(shù)是最常用的應(yīng)用,系統(tǒng)只會(huì)根據(jù)動(dòng)作去回調(diào)相應(yīng)的函數(shù)執(zhí)行,而函數(shù)如何執(zhí)行使我們的應(yīng)用工程師去實(shí)現(xiàn)的內(nèi)容。
除了在GUI系統(tǒng)中應(yīng)用最常見(jiàn)之外,還有一個(gè)很重要的場(chǎng)景就是系統(tǒng)的移植,那些需要系統(tǒng)在運(yùn)行中去實(shí)現(xiàn)的跟具體的CPU和編譯器相關(guān)的內(nèi)容,也是大部分采用回調(diào)的方式來(lái)解決的。
高亮部分是QF構(gòu)架對(duì)于回調(diào)的定義。