C++ 中回調函數詳解及簡單實例
回調函數調用關系圖
對于第一種情況,主程序可以從執行到回調函數,也可以不執行回調函數,關鍵看宿主函數是否調用了回調函數。
對于第二種情況,主程序可以從執行到回調函數,也可以不執行回調函數,關鍵看宿主函數是否調用了回調函數。主程序不知道宿主函數什么時候調用回調函數,因為調用函數啟動了線程,這樣,主程序就不必關心宿主函數什么時候調用回調函數了,主程序可以釋放出來做自己的事了。
代碼示例
#include <stdio.h> typedef void(*lpFunc)(void *, char *); // 函數指針 // 回調函數的宿主函數,在這里回調用函數被使用, void GetCallBack(void * lpVoid, lpFunc callback) { callback(lpVoid, "test"); } class A{ public: A(){}; void outName(char szAlarm[]){ printf("my name is %s /n", szAlarm); } // 被宿主調用的回調函數 static void fCallback(void *lpVoid, char szAlarm[]){ A * p = (A*)(lpVoid); p->outName(szAlarm); } //調用外部宿主函數,當Test函數調用過宿主函數以后,Test就再也不關心宿主函數 //什么時候調用回調函數了,因為那時宿主函數自己的事了 void Test(){ GetCallBack(this, fCallback); } }; int main(void) { A a; a.Test(); }
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
新聞熱點
疑難解答
圖片精選