[個人見解]回調函數

開發語言C++

以下是個人對回調函數的見解(有錯誤請指正):

小白入門:

回調函數主要作用還是信息交互,主要作用於異步情況下。

具體例如:你拿到了別人的SDK,裏面包含一個動態庫,一個頭文件。現在要你去調用它的某個異步函數(比如異步登錄函數)。

那麼你可能會覺得,如果調用的是同步函數,就會在這個函數結束時(可能成功可能出錯)立馬得到返回值。從而可以判斷出這次調用是否失敗或成功,在你看來程序是順序執行的因此很好理解,幹嘛用異步呢?

但是如果它的同步函數在執行中出現了等待(比如網絡延遲需要等待,或者是由於你使用不當出了bug等,這些都是你不能確定的,你不知道它的源碼。)那麼對你的程序將造成同等的影響,這可能會在一個網絡服務程序中大大降低效率。因此有必要使用異步函數來彌補。

到這裏,你可能又會有疑惑:要是異步的函數(你的程序在執行了這個異步函數後會繼續執行下去,可以理解成這個異步函數相當於創建了個新線程,因此你無需等待你想要的的結果)那麼要怎麼得到返回呢?這時,回調函數出現了。

他會給你提供一個函數入口,你可以將你的函數傳遞給他(函數作參數),然後它會在它的那個函數(你剛剛調用的異步函數)結束時調用你傳入的這個函數,以此來達到信息傳遞的作用。說白了就是你按照人家的那個回調函數原型 “實例化” 一個函數,然後把這個函數塞人家裏面,人家就會在該調用的時候(下邊講)調用你的那個函數,注意人家是直接調用你的這個函數(之前有說,相當於一個新的線程),因此你的這個函數的執行可能會與你的 “主進程” 衝突(簡單的線程衝突問題),記得分析流程加鎖來保證線程安全。

至於什麼叫 “該調用的時候” 呢?這個有很多的,如:你登錄,登陸成功會回調,失敗也會回調。你執行某個操作,可能失敗的花樣很多,比如參數錯誤,網絡不通等等,這些時候都可以引起回調。回調多用於信息傳遞,所以有任何信息需要傳遞的都可以使用回調函數解決。那麼你可能會說:我一個程序必然會有各種各樣的信息需要傳遞,那豈不是要很多回調函數?

這個問題難以回答,具體還要看你的想法,比如你可以把登錄登出使用同一回調函數,因爲他們傳遞同樣的消息:用戶名密碼(簡單例子)。但更常用的是在錯誤回調方面,因爲錯誤通常只需要傳遞一個字符串或一個錯誤碼。因此,爲你的程序設置一個錯誤回調函數也許是不錯的選擇(如果有必要的話)(錯誤碼很常見,可以根據人家的錯誤回調函數來比對人家的開發手冊,從而分析錯誤的原由)。

以上是個非常簡單、普通且常見的例子。(???回調函數還有其他用法嗎???

花裏胡哨的用法其實很多(就像 void * 一樣耐人尋味   笑

待續。。。         一般有這倆字的基本就是終結了

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