導航:首頁 > 廢水知識 > c回調類型有什麼用

c回調類型有什麼用

發布時間:2022-09-05 12:47:34

A. C語言中的回調函數使用情況

Search_List 函數 的第二個 參數 是 函數指針
在Search_List函數內 利用這個指針 去調回用被傳入的另答一個函數
if (compare((node->value_address), desired_value) == 0) 就是 則個if 里的

B. VC++中的回調函數,即callback類型函數的作用是什麼

操作系統: WIN98
我想在C++ 中使用回調函數,請問它的內在機制如何,另外怎麼定義。我用DialogBox函數時,如何使用回調函數? 它和鉤子函數有何不同?多謝指教!!!拜託!!!A:使用回調函數實際上就是在調用某個函數(通常是API函數)時,將自己的一個函數(這個函數為回調函數)的地址作為參數傳遞給那個函數。而那個函數在需要的時候,利用傳遞的地址調用回調函數,這時你可以利用這個機會在回調函數中處理消息或完成一定的操作。至於如何定義回調函數,跟具體使用的API函數有關,一般在幫助中有說明回調函數的參數和返回值等。C++中一般要求在回調函數前加CALLBACK,這主要是說明該函數的調用方式。DialogBox的回調函數實際上是個窗口過程,用來處理所有消息。其定義為:
BOOL CALLBACK DialogProc(
HWND hwndDlg, // handle of dialog box
UINT uMsg, // message
WPARAM wParam, // first message parameter
至於鉤子函數,只是回調函數的一個特例。習慣上把與SetWindowsHookEx函數一起使用的回調函數稱為鉤子函數。也有人把利用VirtualQueryEx安裝的函數稱為鉤子函數,不過這種叫法不太流行。
frank的意見:
我對回調函數的理解雖然粗淺,但是我覺得會讓人更容易理解:回調函數就相當於一個中斷處理函數,由系統在符合你設定的條件時自動調用。為此,你需要做三件事:1,聲明;2,定義;3,設置觸發條件,就是在你的函數中把你的回調函數名稱轉化為地址作為一個參數,以便於系統調用。
聲明和定義時應注意:回調函數由系統調用,所以可以認為它屬於WINDOWS系統。不要把它當作你的某個類的成員函數。
ping的意見:
frank說:回調函數屬於WINDOWS系統。我覺得不應該說回調函數是屬於系統的。應該說是程序把這段代碼的觸發交由系統來做。而這種做法是WINDOWS提供的處理機制吧,因為消息是系統一手掌握著的,由系統來調用我們的程序對消息的處理部分,這樣子會比較方便。不然我們又得花力氣去讀消息列表了。

C. java裡面,c裡面都有回調函數,回調函數都是什麼東西啊

嗯,的確都有回調函數,但是C與java中的回調實現的方法不太一樣
C中的回調函數,是由指針實現的,將某個函數方法的地址賦給某個指針變數,然後直接由這個變數去調用方法。可以通過一個指針實現不同方法的調用。
java中,沒有指針這一概念。所以回調函數的意義似乎也不太一樣,感覺跟C比起來更像是團隊開發的一種手段和方法。java中的回調是通過介面實現的,調用函數不用知道被調用的函數是如何實現的,只需要寫好一個被調函數的介面聲明,然後根據介面調用。至於被調用函數,只需要重載介面方法就可以讓調用函數去調用...說白了就是,一個人只負責去寫大的程序流程,細節的方法部分不需要寫,只要留好介面聲明,然後讓別的人去寫這個介面的重載就可以了。更適合於團隊開發以及程序更新優化。
好吧我快給我自己說暈了
給你兩個例子去看下,這倆寫的還都比較清楚
java的:http://blog.csdn.net/allen_zhao_2012/article/details/8056665
C的:http://www.cnblogs.com/chenyuming507950417/archive/2012/01/02/2310114.html

D. C&C 回調是什麼意思

C&C 回調是一種病毒/木馬程序與伺服器建立連接和接收指令的方法。它的後端是控制與命令伺服器(C&C伺服器)。

E. 什麼是C語言的回調函數具體怎麼用呢

回調函數,抄顧名思義,也就是襲等該函數執行完了,會回去調用我們傳進去的函數。
用到回調函數的地方有不少,像我見過的:SQLite中的一個函數,sqlite_exec函數名有沒有記錯我沒什麼印象了。待這個函數執行完畢後,會去調用我傳進去的一個函數,一般回調函數都是有自己的參數列表格式的,再利用這個格式從回調函數中獲取到我們需要的一些值。

F. C語言的回調函數

callback Function
回調函數是應用程序提供給Windows系統DLL或其它DLL調用的函數,一般用於截獲消息、獲取系統信息或處理非同步事件。應用程序把回調函數的地址指針告訴DLL,而DLL在適當的時候會調用該函數。回調函數必須遵守事先規定好的參數格式和傳遞方式,否則DLL一調用它就會引起程序或系統的崩潰。通常情況下,回調函數採用標准WindowsAPI的調用方式,即__stdcall,當然,DLL編制者可以自己定義調用方式,但客戶程序也必須遵守相同的規定。在__stdcall方式下,函數的參數按從右到左的順序壓入堆棧,除了明確指明是指針或引用外,參數都按值傳遞,函數返回之前自己負責把參數從堆棧中彈出。
理解回調函數!

程序在調用一個函數(function)時(通常指api).相當於程序(program)呼叫(Call)了一個函數(function)關系表示如下:
call(調用)
program --------------------→ dll

程序在調用一個函數時,將自己的函數的地址作為參數傳遞給程序調用的函數時(那麼這個自己的函數稱回調函數).需要回調函數的 DLL 函數往往是一些必須重復執行某些操作的函數.關系表示如下:

call(調用)
program --------------------→ dll
↑ ¦
¦_______________________________¦
callback(回調)

當你調用的函數在傳遞返回值給回調函數時,你就可以利用回調函數來處理或完成一定的操作。至於如何定義自己的回調函數,跟具體使用的API函數有關,很多不同類別的回調函數有各種各樣的參數,有關這些參數的描述一般在幫助中有說明回調函數的參數和返回值等.其實簡單說回調函數就是你所寫的函數滿足一定條件後,被DLL調用!

也有這樣的說法(比較容易理解):
回調函數就好像是一個中斷處理函數,系統在符合你設定的條件時自動調用。為此,你需要做三件事:
1. 聲明;
2. 定義;
3. 設置觸發條件,就是在你的函數中把你的回調函數名稱轉化為地址作為一個參數,以便於DLL調用。

G. C語言的回調函數怎麼用,請幫忙舉例說明

看一下這個例子吧,我是這樣理解的:
#include
"iostream.h"
#include
"windows.h"
typedef
void
(CALLBACK
*MyFun)(void);//回調函數定義
void
CALLBACK
callback()
//
回調函數
{
cout<<"****callback****\n";
}
void
Call_CallBack(MyFun
mycb)
{
cout<<"****Call_CallBack****\n";
mycb();
cout<<"__________________\n";
}
void
main()
{
Call_CallBack(callback);
}
//
其他人需要修專改的話只要修改callback函數里屬的內容就行了,一般sdk封裝後都會有回調,這樣他人在調用sdk的時候就可以實現回調函數里的內容。
如果你需要理論的,網上搜回調函數,內容哈多隨便看

H. c語言中有關回調函數的概念。

1. 是的。
2. 不直接在search_link內部調用compare的好處是:可以將任意名稱的函數當作參數傳遞,只要它們的返回類型,參數類型一致就OK,這樣更具靈活性。

I. 什麼是"回調"在C和它們是如何實現的

以我的理解恐怕這個CALLBACK要讓你失望了~~JAVA的操作機制是隱藏了指針和引用,地址的操作在JAVA裡面是不允許的~~所以JNI介面中定義的方法,不能使用函數指針作為形參,所以這個回調函數在JAVA的CLASS中是不能調用的

J. c語言的回調函數的問題

對指針的應用是C語言編程的精髓所在,而回調函數就是C語言裡面對函數指針的高級應用。簡而言之,回調函數是一個通過函數指針調用的函數。如果你把函數指針(函數的入口地址)傳遞給另一個函數,當這個函數指針被用來調用它所指向的函數時,我們就說這個函數是回調函數。
為什麼要使用回調函數呢?我們先看一個小例子:
Node * Search_List (Node * node, const int value)
{
while (node != NULL)
{
if (node -> value == value)
{
break;
}
node = node -> next;
}
return node;
}
這個函數用於在一個單向鏈表中查找一個指定的值,返回保存這個值的節點。它的參數是指向這個鏈表第一個節點的指針以及要查找的值。這個函數看上去很簡單,但是我們考慮一個問題:它只能適用於值為整數的鏈表,如果查找一個字元串鏈表,我們不得不再寫一個函數,其實大部分代碼和現在這個函數相同,只是第二個參數的類型和比較的方法不同。
其實我們更希望令查找函數與類型無關,這樣它就能用於查找存放任何類型值的鏈表了,因此必須改變比較的方式,而藉助回調函數就可以達到這個目的。我們編寫一個函數(回調函數),用於比較兩個同類型的值,然後把一個指向這個函數的指針作為參數傳遞給查找函數,查找函數調用這個比較函數來執行比較,採用這個方法,任何類型的值得都可以進行比較。
我們還必須給查找函數傳遞一個指向待比較的值的指針而不是值本身,也就是一個void *類型的形參,這個指針會傳遞給回調函數,進行最終的比較。這樣的修改可以讓我們傳遞指向任何類型的指針到查找函數,從而完成對任何類型的比較,這就是指針的好處,我們無法將字元串、數組或者結構體作為參數傳遞給函數,但是指向它們的指針卻可以。
現在,我們的查找函數就可以這樣實現:
NODE *Search_List(NODE *node, int (*compare)(void const *, void const *) , \
void const *desired_value);
{
while (node != NULL)
{
if (compare((node->value_address), desired_value) == 0)
{
break;
}
node = node->next;
}
return node;
}
可以看到,用戶將一個函數指針傳遞給查找函數,後者將回調這個函數。
注意這里我們的鏈表節點是這樣定義的:
typedef struct list
{
void *value_address;
struct list *next;
}NODE;
這樣定義可以讓NODE *類型的指針指向存儲任何類型數據的鏈表節點。而value_address就是指向具體數據的指針,我們把它定義為void *,表示一個指向未知類型的指針,這樣鏈表就可以存儲任何類型的數據了,而我們傳遞給查找函數Search_List的第一個參數就可以統一表示為:NODE *,否則,還是要分別寫查找函數以適應存儲不同數據類型的鏈表。
現在,查找函數與類型無關,因為它不進行實際的比較,因此,我們必須編寫針對不同類型的比較函數,這是很容易實現的,因為調用者知道鏈表中所包含的值的類型,如果創建幾個分別包含不同類型值的鏈表,為每種類型編寫一個比較函數就允許單個查找函數作用於所有類型的鏈表。
下面是一個比較函數,用於在一個整型鏈表中查找:
注意強制類型轉換,比較函數的參數必須被聲明為void *以匹配查找函數的原型,然後強制轉換為(int *)類型用於比較整型。
int int_compare(void const *a, void const *b)
{
if (*(int *)a == *(int *)b)
{
return 0;
}
else
{
return -1;
}
}
這個函數可以這樣被使用:
desired_node = Search_List(root, int_compare, &desired_int_value);
如果你希望在一個字元串鏈表中進行查找,下面的代碼就可以完成任務:
desired_node = Search_List(root, strcmp, 「abcdefg」);
正好庫函數strcmp所執行的比較和我們需要的一樣,不過gcc會發出警告信息:因為strcmp的參數被聲明為const char *而不是void const *。
上面的例子展示了回調函數的基本原理和用法,回調函數的應用是非常廣泛的。通常,當我們想通過一個統一介面實現不同內容的時候,用回調函數來實現就非常合適。任何時候,如果你所編寫的函數必須能夠在不同的時刻執行不同的類型的工作或者執行只能由函數調用者定義的工作,你都可以用回調函數來實現。許多窗口系統就是使用回調函數連接多個動作,如拖拽滑鼠和點擊按鈕來指定調用用戶程序中的某個特定函數。

閱讀全文

與c回調類型有什麼用相關的資料

熱點內容
污水處理ppp招標 瀏覽:201
gs3高級空氣濾芯器多少錢 瀏覽:228
桶裝純凈水生產成本多少 瀏覽:938
生活污水採用重力流什麼意思 瀏覽:809
自來水廠水處理用什麼產品 瀏覽:964
影響離子交換劑的離子交換能力 瀏覽:898
井主提升機是否需要專用變壓器 瀏覽:575
水垢擠是什麼意思 瀏覽:717
諾森柏格和泰拉蒙空氣凈化器怎麼樣 瀏覽:460
電鍍廢水如何蒸發 瀏覽:1000
河北質量好軟化水處理器 瀏覽:423
掛燙機除水垢白醋和小蘇打比例 瀏覽:27
污水化驗流程 瀏覽:859
工業廢水回收利用需要什麼資質 瀏覽:67
一桶純凈水重多少克 瀏覽:850
樹脂增強性玻璃離子 瀏覽:604
印刷廢水監測項目 瀏覽:59
一零款日產驪威汽油濾芯在哪裡 瀏覽:66
貓為什麼不和飲水機的水 瀏覽:838
電鍍廢水處理設備廠家電話多少 瀏覽:354