C++ 中回調(diào)函數(shù)詳解及簡單實例
C++ 中回調(diào)函數(shù)詳解及簡單實例
回調(diào)函數(shù)調(diào)用關(guān)系圖
對于第一種情況,主程序可以從執(zhí)行到回調(diào)函數(shù),也可以不執(zhí)行回調(diào)函數(shù),關(guān)鍵看宿主函數(shù)是否調(diào)用了回調(diào)函數(shù)。
對于第二種情況,主程序可以從執(zhí)行到回調(diào)函數(shù),也可以不執(zhí)行回調(diào)函數(shù),關(guān)鍵看宿主函數(shù)是否調(diào)用了回調(diào)函數(shù)。主程序不知道宿主函數(shù)什么時候調(diào)用回調(diào)函數(shù),因為調(diào)用函數(shù)啟動了線程,這樣,主程序就不必關(guān)心宿主函數(shù)什么時候調(diào)用回調(diào)函數(shù)了,主程序可以釋放出來做自己的事了。
代碼示例
#include <stdio.h> typedef void(*lpFunc)(void *, char *); // 函數(shù)指針 // 回調(diào)函數(shù)的宿主函數(shù),在這里回調(diào)用函數(shù)被使用, void GetCallBack(void * lpVoid, lpFunc callback) { callback(lpVoid, "test"); } class A{ public: A(){}; void outName(char szAlarm[]){ printf("my name is %s /n", szAlarm); } // 被宿主調(diào)用的回調(diào)函數(shù) static void fCallback(void *lpVoid, char szAlarm[]){ A * p = (A*)(lpVoid); p->outName(szAlarm); } //調(diào)用外部宿主函數(shù),當(dāng)Test函數(shù)調(diào)用過宿主函數(shù)以后,Test就再也不關(guān)心宿主函數(shù) //什么時候調(diào)用回調(diào)函數(shù)了,因為那時宿主函數(shù)自己的事了 void Test(){ GetCallBack(this, fCallback); } }; int main(void) { A a; a.Test(); }
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
C++異步操作future和aysnc與function和bind
這篇文章主要介紹了C++異步操作future和aysnc與function和bind,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-09-09詳解C++設(shè)計模式編程中責(zé)任鏈模式的應(yīng)用
這篇文章主要介紹了C++設(shè)計模式編程中責(zé)任鏈模式的應(yīng)用,責(zé)任鏈模式使多個對象都有機(jī)會處理請求,從而避免請求的發(fā)送者和接收者之間的耦合關(guān)系,需要的朋友可以參考下2016-03-03海量數(shù)據(jù)處理系列之:用C++實現(xiàn)Bitmap算法
本篇文章是對用C++實現(xiàn)Bitmap算法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05用C語言判斷一個二叉樹是否為另一個的子結(jié)構(gòu)
這篇文章主要介紹了用C語言判斷一個二叉樹是否為另一個的子結(jié)構(gòu),是數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)當(dāng)中的基礎(chǔ)知識,需要的朋友可以參考下2015-08-08