回撥函式快速使用 (轉)

amyz發表於2007-11-26
回撥函式快速使用 (轉)[@more@]

我們經常在C++設計時透過使用回撥可以使有些應用(如定時器事件回撥處理、用回撥函式記錄某操作進度等)變得非常方便和符合邏輯,那麼它的內在機制如何呢,怎麼定義呢?它和其它函式(比如鉤子函式)有何不同呢?這裡結合自己的使用經歷做一個簡單的介紹。

使用回撥函式實際上就是在某個函式(通常是函式)時,將自己的一個函式(這個函式為回撥函式)的地址作為引數傳遞給那個函式。而那個函式在需要的時候,利用傳遞的地址呼叫回撥函式,這時你可以利用這個機會在回撥函式中處理訊息或完成一定的操作。至於如何定義回撥函式,跟具體使用的API函式有關,一般在幫助中有說明回撥函式的引數和返回值等。C++中一般要求在回撥函式前加CALLBACK(相當於FAR PASCAL),這主要是說明該函式的呼叫方式。

至於鉤子函式,只是回撥函式的一個特例。習慣上把與SetHookEx函式一起使用的回撥函式稱為鉤子函式。也有人把利用VirtualQueryEx的函式稱為鉤子函式,不過這種叫法不太流行。

也可以這樣,更容易理解:回撥函式就好像是一箇中斷處理函式,在符合你設定的條件時自動呼叫。為此,你需要做三件事:

1.  宣告;

2.  定義;

3.  設定觸發條件,就是在你的函式中把你的回撥函式名稱轉化為地址作為一個引數,以便於系統呼叫。

宣告和定義時應注意:回撥函式由系統呼叫,所以可以認為它屬於WINDOWS系統,不要把它當作你的某個類的成員函式。

這是我的粗淺認識,望指正。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-984973/,如需轉載,請註明出處,否則將追究法律責任。

相關文章