將一個自定義函數(shù)的指針作為參數(shù)傳遞給一個API函數(shù),供其調(diào)用。這樣的自定義函數(shù),稱為回調(diào)函數(shù)。調(diào)用回調(diào)函數(shù)的過程,稱為回調(diào)。值得注意的是,僅API函數(shù)能實施回調(diào)。常用于回調(diào)的API函數(shù)如:SetWindowLong(),EnumWindows().
成都創(chuàng)新互聯(lián)專注于企業(yè)營銷型網(wǎng)站、網(wǎng)站重做改版、新鄭網(wǎng)站定制設計、自適應品牌網(wǎng)站建設、HTML5、商城網(wǎng)站建設、集團公司官網(wǎng)建設、成都外貿(mào)網(wǎng)站建設公司、高端網(wǎng)站制作、響應式網(wǎng)頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為新鄭等各大城市提供網(wǎng)站開發(fā)制作服務。
回調(diào)函數(shù)實際上是C語言中由用戶特殊定義的外部函數(shù),只不過函數(shù)的結構有些特殊規(guī)定。他的功能是用來響應對應的事件。
看一下這個例子吧,我是這樣理解的:
#include
"iostream.h"
#include
"windows.h"
typedef
void
(CALLBACK
*MyFun)(void);//回調(diào)函數(shù)定義
void
CALLBACK
callback()
//
回調(diào)函數(shù)
{
cout"****callback****\n";
}
void
Call_CallBack(MyFun
mycb)
{
cout"****Call_CallBack****\n";
mycb();
cout"__________________\n";
}
void
main()
{
Call_CallBack(callback);
}
//
其他人需要修改的話只要修改callback函數(shù)里的內(nèi)容就行了,一般sdk封裝后都會有回調(diào),這樣他人在調(diào)用sdk的時候就可以實現(xiàn)回調(diào)函數(shù)里的內(nèi)容。
如果你需要理論的,網(wǎng)上搜回調(diào)函數(shù),內(nèi)容哈多隨便看
回調(diào)函數(shù),顧名思義,也就是等該函數(shù)執(zhí)行完了,會回去調(diào)用我們傳進去的函數(shù)。
用到回調(diào)函數(shù)的地方有不少,像我見過的:SQLite中的一個函數(shù),sqlite_exec函數(shù)名有沒有記錯我沒什么印象了。待這個函數(shù)執(zhí)行完畢后,會去調(diào)用我傳進去的一個函數(shù),一般回調(diào)函數(shù)都是有自己的參數(shù)列表格式的,再利用這個格式從回調(diào)函數(shù)中獲取到我們需要的一些值。
回調(diào)函數(shù) 就是上層調(diào)用 設置下去
底層通過函數(shù)指針調(diào)用上層函數(shù)
多文件中才有用 單文件可以模擬
比如
#include?stdio.h
typedef?void?(*pFuncCb)?(int);//定義回調(diào)函數(shù)。
void?callback1(int?a)
{
printf("callback?function1?is?called?and?parameter?=?%d\n",?a);//打印1
}
void?callback2(int?a)
{
printf("callback?function2?is?called?and?parameter?=?%d\n",?a);//打印2
}
pFuncCb?callback_function;
void?lowerFunc(int?n)
{
int?i;
for(i?=?n;?i??n+10;?i?++)
if(callback_function)?callback_function(i);
}
int?main()
{
callback_function?=?callback1;
lowerFunc(1);//?會打印十次?打印1,?1到10
callback_function?=NULL;
lowerFunc(10);//沒有打印。
callback_function?=?callback2;
lowerFunc(100);//?會打印十次?打印2,?100到110
return?0;
}