回调函数总结(个人见解)
生活随笔
收集整理的這篇文章主要介紹了
回调函数总结(个人见解)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
回調函數總結(個人見解):
1.?? ?回調函數的實現?? ?==>?? ?被調用者寫
2.?? ?寫庫的人?? ?==> 調用回調函數的人 ==> 調用者
2.1?? ?調用者:
?? ??? ?1) 不關心誰是被調用者
?? ??? ?2) 只關心回調函數的原型及返回值
?? ??? ?3) 聲明回調函數的接口,回調函數的實現交給被調用者去處理
2.2?? ?被調用者
?? ??? ?1) 根據調用者聲明的回調函數接口原型進行實現
?? ??? ?2) 實現規則由被調用者控制
?? ??? ?3) 被調用者可以修改實現規則
3.?? ?若回調函數接口(返回值或參數列表)發生變化,則其實現或調用者都可能要修改代碼!
如有不同意見,歡迎探討!
軟件模塊之間總存在一定的接口,調用方式可分為三類: 同步調用,回調,異步調用
1. 同步調用最簡單
2. 回調是異步調用的基礎
許多編譯器有幾種調用規范。
如在Visual C++中,可以在函數類型前加_cdecl,_stdcall或者_pascal來表示其調用規范(默認為_cdecl)。
C++ Builder也支持_fastcall調用規范。
調用規范影響編譯器產生的給定函數名,參數傳遞的順序(從右到左或從左到右),堆棧清理責任(調用者或者被調用者)以及參數傳遞機制(堆棧,CPU寄存器等)。
將調用規范看成是函數類型的一部分是很重要的;不能用不兼容的調用規范將地址賦值給函數指針。
回調函數就好像是一個中斷處理函數,系統在符合你設定的條件時自動調用。為此,你需要做三件事:
1. 聲明;statci int __stdcall MyAdd(int x, int y)
2. 定義;int MyAdd(intx, int y){(實現)}
3. 設置觸發條件,就是在你的函數中把你的回調函數名稱轉化為地址作為一個參數,以便于系統調用。
聲明和定義時應注意:回調函數可以作為類的成員函數,但必須聲明為靜態方法。
--------------
在其它類、模塊使用時要先導出那個回調類型
如:typedef BOOL(CS_NVR_CALLBACK* CS_NVR_fpVMapReport)(LPMON_ITEM pStuMonItem, LPCAM_ITEM pStuCamItem, long lParam);
其中CS_NVR_fpVMapReport就是回調函數的類型
1.?? ?回調函數的實現?? ?==>?? ?被調用者寫
2.?? ?寫庫的人?? ?==> 調用回調函數的人 ==> 調用者
2.1?? ?調用者:
?? ??? ?1) 不關心誰是被調用者
?? ??? ?2) 只關心回調函數的原型及返回值
?? ??? ?3) 聲明回調函數的接口,回調函數的實現交給被調用者去處理
2.2?? ?被調用者
?? ??? ?1) 根據調用者聲明的回調函數接口原型進行實現
?? ??? ?2) 實現規則由被調用者控制
?? ??? ?3) 被調用者可以修改實現規則
3.?? ?若回調函數接口(返回值或參數列表)發生變化,則其實現或調用者都可能要修改代碼!
如有不同意見,歡迎探討!
軟件模塊之間總存在一定的接口,調用方式可分為三類: 同步調用,回調,異步調用
1. 同步調用最簡單
2. 回調是異步調用的基礎
許多編譯器有幾種調用規范。
如在Visual C++中,可以在函數類型前加_cdecl,_stdcall或者_pascal來表示其調用規范(默認為_cdecl)。
C++ Builder也支持_fastcall調用規范。
調用規范影響編譯器產生的給定函數名,參數傳遞的順序(從右到左或從左到右),堆棧清理責任(調用者或者被調用者)以及參數傳遞機制(堆棧,CPU寄存器等)。
將調用規范看成是函數類型的一部分是很重要的;不能用不兼容的調用規范將地址賦值給函數指針。
回調函數就好像是一個中斷處理函數,系統在符合你設定的條件時自動調用。為此,你需要做三件事:
1. 聲明;statci int __stdcall MyAdd(int x, int y)
2. 定義;int MyAdd(intx, int y){(實現)}
3. 設置觸發條件,就是在你的函數中把你的回調函數名稱轉化為地址作為一個參數,以便于系統調用。
聲明和定義時應注意:回調函數可以作為類的成員函數,但必須聲明為靜態方法。
--------------
在其它類、模塊使用時要先導出那個回調類型
如:typedef BOOL(CS_NVR_CALLBACK* CS_NVR_fpVMapReport)(LPMON_ITEM pStuMonItem, LPCAM_ITEM pStuCamItem, long lParam);
其中CS_NVR_fpVMapReport就是回調函數的類型
總結
以上是生活随笔為你收集整理的回调函数总结(个人见解)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: protues仿真arduino串口通讯
- 下一篇: 使用CMD命令修改Windows本地账户