最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

講解回調(diào)函數(shù)與鉤子函數(shù)(一文搞定~)

2023-02-08 16:45 作者:補(bǔ)給站Linux內(nèi)核  | 我要投稿

1、“回調(diào)”與“鉤子”

什么是回調(diào)函數(shù)?什么又是鉤子函數(shù)?目前對(duì)于這兩個(gè)概念的定義可能難以理解,在編程的過(guò)程中也是有點(diǎn)難區(qū)別,因?yàn)樗麄儽举|(zhì)上都是屬于函數(shù),只是說(shuō)是函數(shù)的一種應(yīng)用的形式不同罷了,既然我們這里談到這個(gè)話題那就好好分析分析。

? ? 不管是鉤子函數(shù)還是回調(diào)函數(shù)為了保持程序的靈活性,大部分都會(huì)采用函數(shù)指針的方式進(jìn)行設(shè)計(jì),所以一般小伙伴都直接認(rèn)為是函數(shù)指針的一種應(yīng)用,如果從語(yǔ)法的角度來(lái)看,確實(shí)是這么回事,可是我們需要換一個(gè)角度去看待一個(gè)事物,就像我們之前談面向?qū)ο缶幊?,如果你用面向過(guò)程的思維方式去理解面向?qū)ο蟮脑O(shè)計(jì)是難以理解的,所以這里的兩個(gè)概念也是一樣的。


【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【749907784】整理了一些個(gè)人覺(jué)得比較好的學(xué)習(xí)書(shū)籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。。ê曨l教程、電子書(shū)、實(shí)戰(zhàn)項(xiàng)目及代碼)? ?


2、回調(diào)函數(shù)

? ? 應(yīng)該很多小伙伴在編程中或者閱讀別人的代碼的時(shí)候都會(huì)看到callback的字樣,是的,回調(diào)函數(shù)的英文就是callback Fuction,從字面上來(lái)理解 :?反過(guò)來(lái)調(diào)用的函數(shù),那我們就需要知道它本來(lái)要去哪里,它又返回到什么地方執(zhí)行,好,下面作者給個(gè)簡(jiǎn)單的demo:

Demo:
最后輸出結(jié)果:

????其實(shí)從形式上看來(lái)確實(shí)沒(méi)有什么特別的就是函數(shù)指針的應(yīng)用,不過(guò)我們換一個(gè)角度,用分層的設(shè)計(jì)角度再對(duì)回調(diào)函數(shù)進(jìn)行理解,把Cal函數(shù)認(rèn)為是底層函數(shù)(也可以說(shuō)是庫(kù)函數(shù)),把main看成是上層應(yīng)用函數(shù),而add和sub認(rèn)為是上層的方法,現(xiàn)在main要讓底層Cal去進(jìn)行計(jì)算了,而我們的Cal函數(shù)再執(zhí)行過(guò)程中發(fā)現(xiàn)不知道用什么方法進(jìn)行計(jì)算,于是他又打道回府去拿到計(jì)算的方法,然后獲得最后的結(jié)果返回給main,那么這里的Sub和Add都認(rèn)為是回調(diào)函數(shù)。

3、鉤子函數(shù)

? ? 一看到鉤子(Hook)我們首先想到的動(dòng)作就是掛鉤,作者這里舉個(gè)例子:今天要吃魚(yú),去河邊釣魚(yú),于是我們準(zhǔn)備好釣魚(yú)竿,終于有魚(yú)上鉤了,一看原來(lái)是條小魚(yú),于是便放了,繼續(xù)釣魚(yú),接著釣了條大魚(yú),于是收工回去吃大餐。

? ? 所以鉤子函數(shù)看來(lái)就相當(dāng)于一個(gè)監(jiān)測(cè)器,在消息傳遞的過(guò)程中,捕獲自己感興趣的內(nèi)容,然后去處理,鉤子函數(shù)這個(gè)概念在消息機(jī)制中經(jīng)常會(huì)提到的,它也是一個(gè)函數(shù),一般是通過(guò)函數(shù)指針進(jìn)行靈活的注冊(cè),這樣一說(shuō),完了,分不清楚了,首先我們還是要選擇好角度,不確定角度真的說(shuō)不清。

????大家可能會(huì)發(fā)現(xiàn)鉤子函數(shù)也是用戶定義的,是不是也可以理解為一個(gè)回調(diào)函數(shù)呢?形式上確實(shí)可以認(rèn)為鉤子函數(shù)也是一種回調(diào)函數(shù),不過(guò)這樣沒(méi)有什么意義,我還可以說(shuō)他們都是函數(shù)呢?還是要從函數(shù)的功能上區(qū)分,回調(diào)函數(shù)更多的是目的處理,而鉤子函數(shù)更多的是過(guò)程監(jiān)控,對(duì)于鉤子函數(shù)的應(yīng)用在rt-thread或者FreeRtos中都使用得非常多。

RT-Thread中截取的鉤子函數(shù)代碼參考:


? ? RT-Thread通過(guò)一個(gè)宏定義來(lái)讓用戶決定是否開(kāi)啟鉤子函數(shù)功能,上面每次進(jìn)入中斷都會(huì)調(diào)用對(duì)應(yīng)的鉤子函數(shù),具體鉤子函數(shù)根據(jù)自身需求進(jìn)行設(shè)計(jì),比如統(tǒng)計(jì)或者監(jiān)控等等功能。


原文作者:最后一個(gè)bug





講解回調(diào)函數(shù)與鉤子函數(shù)(一文搞定~)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
湛江市| 桦川县| 饶河县| 游戏| 海晏县| 十堰市| 武强县| 江都市| 景东| 射阳县| 彰武县| 德兴市| 新郑市| 丽江市| 当涂县| 洞口县| 枣庄市| 沂源县| 祁东县| 广丰县| 霍州市| 宣恩县| 通河县| 桐庐县| 金昌市| 桓台县| 沿河| 元阳县| 西乡县| 龙井市| 西城区| 进贤县| 库车县| 商南县| 南汇区| 盐津县| 孝感市| 榕江县| 麻城市| 界首市| 浮山县|