更新時間:2022年05月09日11時31分 來源:傳智教育 瀏覽次數:
軟件模塊之間總是存在著一定的接口,從調用方式上,可以把他們分為三類:同步調用、回調和異步調用
同步調用是一種阻塞式調用,調用方要等待對方執(zhí)行完畢才 返回,它是一種單向調用;回調是一種雙向調用模式,也就是說,被調用方在接口被調用時也會調用對方的接口;
異步調用是一種類似消息或事件的機制,不過它的 調用方向剛好相反,接口的服務在收到某種訊息或發(fā)生某種事件時,會主動通知客戶方(即調用客戶方的接口)?;卣{和異步調用的關系非常緊密,通常我們使用回 調來實現異步消息的注冊,通過異步調用來實現消息的通知。同步調用是三者當中最簡單的,而回調又常常是異步調用的基礎,因此,下面我們著重討論回調機制在 不同軟件架構中的實現
回調函數就是一個通過函數指針調用的函數。如果你把函數的指針(地址)作為參數傳遞給另一個函數,當這個指針被用來調用其所指向的函數時,我們就說這是回調函數?;卣{函數不是由該函數的實現方直接調用,而是在特定的事件或條件發(fā)生時由另外的一方調用的,用于對該事件或條件進行響應。
案例:
#include<stdio.h> //callbackTest.c //1.定義函數onHeight(回調函數) //@onHeight 函數名 //@height 參數 //@contex 上下文 void onHeight(double height, void *contex) { printf("current height is %lf", height); } //2.定義onHeight函數的原型 //@CallbackFun 指向函數的指針類型 //@height 回調參數,當有多個參數時,可以定義一個結構體 //@contex 回調上下文,在C中一般傳入nullptr,在C++中可傳入對象指針 typedef void (*CallbackFun)(double height, void *contex); //定義全局指針變量 CallbackFun m_pCallback; //定義注冊回調函數 void registHeightCallback(CallbackFun callback, void *contex) { m_pCallback = callback; } //定義調用函數 void printHeightFun(double height) { m_pCallback(height, NULL); } //main函數 int main() { //注冊回調函數onHeight registHeightCallback(onHeight, NULL); //打印height double h = 99; printHeightFun(99); }