C++ 中回調(diào)函數(shù)詳解及簡(jiǎn)單實(shí)例
C++ 中回調(diào)函數(shù)詳解及簡(jiǎn)單實(shí)例
回調(diào)函數(shù)調(diào)用關(guān)系圖

對(duì)于第一種情況,主程序可以從執(zhí)行到回調(diào)函數(shù),也可以不執(zhí)行回調(diào)函數(shù),關(guān)鍵看宿主函數(shù)是否調(diào)用了回調(diào)函數(shù)。
對(duì)于第二種情況,主程序可以從執(zhí)行到回調(diào)函數(shù),也可以不執(zhí)行回調(diào)函數(shù),關(guān)鍵看宿主函數(shù)是否調(diào)用了回調(diào)函數(shù)。主程序不知道宿主函數(shù)什么時(shí)候調(diào)用回調(diào)函數(shù),因?yàn)檎{(diào)用函數(shù)啟動(dòng)了線程,這樣,主程序就不必關(guān)心宿主函數(shù)什么時(shí)候調(diào)用回調(diào)函數(shù)了,主程序可以釋放出來(lái)做自己的事了。
代碼示例
#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)用過(guò)宿主函數(shù)以后,Test就再也不關(guān)心宿主函數(shù)
//什么時(shí)候調(diào)用回調(diào)函數(shù)了,因?yàn)槟菚r(shí)宿主函數(shù)自己的事了
void Test(){
GetCallBack(this, fCallback);
}
};
int main(void)
{
A a;
a.Test();
}
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
使用C++實(shí)現(xiàn)單鏈表的操作與實(shí)踐
在程序設(shè)計(jì)中,鏈表是一種常見的數(shù)據(jù)結(jié)構(gòu),特別是在動(dòng)態(tài)數(shù)據(jù)管理、頻繁插入和刪除元素的場(chǎng)景中,鏈表相比于數(shù)組,具有更高的靈活性和高效性,尤其是在需要頻繁修改數(shù)據(jù)結(jié)構(gòu)的應(yīng)用中,本文將詳細(xì)介紹如何用C++語(yǔ)言實(shí)現(xiàn)一個(gè)面向?qū)ο蟮膯捂湵?并展示完整的代碼示例2025-02-02
解析C++無(wú)鎖隊(duì)列的實(shí)現(xiàn)代碼
本篇文章是對(duì)C++無(wú)鎖隊(duì)列的實(shí)現(xiàn)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05

