溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C++ 中回調(diào)函數(shù)詳解及簡單實例

發(fā)布時間:2020-10-18 18:07:15 來源:腳本之家 閱讀:341 作者:lqh 欄目:編程語言

C++ 中回調(diào)函數(shù)詳解及簡單實例

回調(diào)函數(shù)調(diào)用關(guān)系圖

 C++ 中回調(diào)函數(shù)詳解及簡單實例

對于第一種情況,主程序可以從執(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(); 
} 

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI