成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Delphi基礎 回調函數及其使用

開發 開發工具
回調函數就是通過函數的指針來調用的函數。對于一個傳遞給其他函數的參數,如果你傳遞的是一個函數的指針(也就是地址),當這個指針被用來調用這個函數時,就可以說是構造了一個回調函數。本文介紹DELPHI中的回調函數。

“回調機制”是window 在執行某個API函數的過程中,調用指定的一個函數(回調函數)。

比如:你有一個任務,但是有一部分你不會做,或者說不愿做,所以我來幫你做這部分,你做你其它的任務工作或者等著我的消息,但是當我完成的時候我要通知你我做好了,你可以用了,我怎么通知你呢?你給我一部手機,讓我做完后給你打電話,我就打給你了,你拿到我的成果加到你的工作中,繼續完成其它的工作.這就叫回叫,手機是我通知你的手段,它就是回叫函數,也叫回調函數(Callback Function)。

簡單說就是,由程序員編寫的,給windows系統(API)調用的函數。 也就是說,函數的功能有你定,調用有windows系統(API)調用。

回調函數就是通過函數的指針來調用的函數。對于一個傳遞給其他函數的參數,如果你傳遞的是一個函數的指針(也就是地址),當這個指針被用來調用這個函數時,就可以說是構造了一個回調函數。就是你把自定義函數地址給別人,別人調用你的函數。

回調函數,就是由你自己寫的。你需要調用另外一個函數,而這個函數的其中一個參數,就是你的這個回調函數名。這樣,系統在必要的時候,就會調用你寫的回調函數,這樣你就可以在回調函數里完成你要做的事。

1. 回調函數是由開發者按照一定的原型進行定義的函

2. 回調函數并不由開發者直接調用執行

3 .回調函數通常作為參數傳遞給系統API,由該API來調用。

4. 回調函數可能被系統API調用一次,也可能被循環調用多次。

回調函數主要用于一些比較費時的操作,或響應不知道何時將會發生的事件,回調函數提供了一種異步的機制,相對于同步執行,提高了效率.

前者的例子如WriteFileEx,ReadFileEx等,函數的***一個參數是一個回調函數的指針,程序中調用WriteFileEx以后,就直接返回了,可以繼續進行其他工作,系統在讀寫操作完成后通知程序作善后處理.后者的例子就是windows的事件機制回調函數的另一個用途,是用于一些枚舉函數,如EnumDisplayModes等,每找到一種支持的顯示模式,就通知回調函數,由回調函數具體處理,這是因為 EnumDisplayModes本身并不知道用戶要如何處理.能,用戶提供回調函數,定制系統的功能,這樣,不同的用戶提供不同的回調函數,可以使系統具有不同的功能.

這就是所謂的plugin.使用回調函數實際上就是在調用某個函數(通常是API函數)時,將自己的一個函數(這個函數為回調函數)的地址作為參數傳遞給那個函數。而那個函數在需要的時候,利用傳遞的地址調用回調函數,這時你可以利用這個機會在回調函數中處理消息或完成一定的操作。至于如何定義回調函數,跟具體使用的API函數有關,一般在幫助中有說明回調函數的參數和返回值等。

1。比如在內核編程中,驅動程序就要提供一些回調函數,當一個設備的數據讀寫完成后,讓系統調用這些回調函數來執行一些后續工作。

2。回調函數和其他函數沒什么區別,只是有固定的參數和調用約定,比如windows的回掉函數都要用stdcall. 參數是由調用這個回調函數的函數傳遞的,當然要規定好參數格式。使用很簡單,就是傳遞這個回調函數的地址給調用的函數作為一個參數。比如創建線程的時候就是這樣的 。

3。回調函數的使用主要在于windows原有的API函數,但對于用戶的自定義的調用函數一般在于動態連接庫中。常規的同一個工程下面一般不需要使用回調函數。(個人認為).。

使用回調函數需要注意的地方:

1、 定義一個回調函數類型,跟一般的函數過程的定義并沒有什么區別,但其定義必須根據需要滿足回調函數的函數要求,唯一的區別在于在函數或過程的定義后面必須聲明其為windows標準調用;
例:
對于函數的聲明:

type

  1. THDFunction= function(I:integer;s:string):integer; stdcall; 

對于過程的聲明:

type

  1. THDProcedure=procedure(s:string); stdcall; 

2、 然后根據此原形定義一個相應的函數或過程,對于這個函數或過程來說名字沒有什么要求,對函數其參數的類型和返回值的類型必須和定義的回調函數類型完全一致,對于過程來說,只需要其參數類型一樣就可以了。

例:根據上面的函數和過程的原形定義一個相應的函數和一個相應的過程。

函數原形定義:

  1. Function HdFunExample(k:integer,sExam:string):integer; stdcall; 

過程定義:

  1. procedure HdProExample(sExam:string);stdcall; 

3、 在程序中實現此回調函數或著過程;

  1. Function HdFunExample(k:integer,sExam:string):integer; stdcall;  
  2. Begin  
  3. End;  
  4. procedure HdProExample(sExam:string);stdcall;  
  5. begin  
  6. end; 

4、 調用過程;

回調函數一般作為系統的某個函數的入口地址;

根據調用函數的原形:

假設有如下調用函數:

  1. function DyHdFunExample(HdFun:THDFunction;I:integer):boolean

注:

在調用函數中通過對函數指針的處理可以直接調用回調函數(即調用函數中的那個是回調函數類型的參數,直接操作它),使回調函數履行一定的操作。即在調用函數中實現回調函數的功能。

調用:

  1. var 
  2. I:integer;  
  3. begin  
  4. I:=DyHdFunExample(@HdFunExample,i);  
  5. //…….  
  6. End; 

【編輯推薦】

  1. C++回調函數代碼示例解讀
  2. 6.4.3 利用dojo.Deferred注冊回調函數
  3. 講解如何實現C#回調函數
  4. C/C++中回調函數初探
  5. 1.4.7 HelloWDM對其他IRP的回調函數
責任編輯:于鐵 來源: CSDN
相關推薦

2012-02-01 10:33:59

Java

2024-11-25 07:00:00

箭頭函數JavaScriptReact

2019-11-05 10:03:08

callback回調函數javascript

2022-04-12 08:30:52

回調函數代碼調試

2011-07-25 14:32:40

Cocoa 框架 函數

2011-06-15 11:05:14

C語言回調函數

2009-08-12 10:11:18

C# 回調函數

2011-05-20 17:59:06

回調函數

2009-11-04 11:32:20

VB.NET回調函數

2009-08-19 17:10:09

C#回調函數

2010-02-04 16:07:39

C++回調函數

2017-11-16 16:15:28

Await開發嵌套

2009-12-22 19:00:08

WCF回調

2023-04-18 08:10:10

2022-03-08 11:17:54

函數指針回調函數C語言

2021-01-14 07:52:24

JavaScript回調函數

2022-04-18 08:34:29

回調函數命令解析

2009-07-31 16:25:29

C#回調函數API應用

2018-11-29 08:00:20

JavaScript異步Promise

2010-01-06 16:40:11

.Net Framew
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人免费大片黄在线播放 | 国产视频三区 | 日韩精品视频在线播放 | 成人在线电影网站 | 精品国产一区二区三区性色av | 久久99久久久久 | 国产二区在线播放 | 久久精品成人 | 中文字幕国产 | 精品久久久久久久久久 | 国产精品九九九 | 亚洲综合在线视频 | 一区二区三区网站 | 九九久久久 | 一级免费在线视频 | 91福利影院 | 久久国产精品免费一区二区三区 | 人人干人人看 | 国产精品视频一二三区 | 成人午夜免费在线视频 | 日韩视频区 | 精品久久久久久久 | 国产91色在线 | 亚洲 | 一级网站 | 精品亚洲91| 亚洲精品国产成人 | 亚洲一区二区三区在线播放 | 在线视频 亚洲 | 中文字幕不卡视频在线观看 | 国产精品成人一区二区三区 | www.狠狠干 | 天堂久久网 | 一区二区三区在线 | 日韩at| 91视频网| 亚洲美女一区二区三区 | 欧美 日韩 在线播放 | 一本一道久久a久久精品综合蜜臀 | 91免费看片神器 | 狠狠的干 | 天天操天天摸天天爽 |