回調(diào)函數(shù)個人淺見

網(wǎng)上關于回調(diào)函數(shù)的解釋非常多,概念、代碼、各種類比都很全面,這里只結(jié)合項目談談自己的理解。

軟件基于MF框架從攝像頭采集視頻,其中一項功能是將幀圖像保存為bmp格式。整個功能可以分兩步實現(xiàn),即數(shù)據(jù)采集和格式轉(zhuǎn)換。數(shù)據(jù)采集由框架自帶的函數(shù)實現(xiàn),將采集到的圖像數(shù)據(jù)push入隊列,并于適當?shù)臅r機pop出來,由函數(shù)實現(xiàn)圖像格式的轉(zhuǎn)換和保存。

我一開始的思路是用通信中握手的方式,當數(shù)據(jù)push后給主窗口發(fā)送一條自定義消息,由消息響應函數(shù)將數(shù)據(jù)pop出來并進行處理。這種方式需要數(shù)據(jù)調(diào)用方(界面)和發(fā)送方(底層)事先約定好,當數(shù)據(jù)采集方法封裝成庫時(實際上幾乎一定會這樣),需要使用者去了解庫的細節(jié),因此這種方式非常不靈活。

后來用回調(diào)函數(shù)實現(xiàn)功能。我把回調(diào)函數(shù)理解成一張圖紙,好比說我需要做一件衣服,或者一條褲子,我畫一張圖紙去完成我的需求,雖然我沒有布和線等材料,但我可以把圖紙交給裁縫店替我把需求實現(xiàn)了。這里我的圖紙就是回調(diào)函數(shù),裁縫店就是調(diào)用方。用代碼可以寫成:

typedef void (CALLBACK *blueprint)(param1, ... , paramN);      //回調(diào)函數(shù)
void WINAPI tailor(param1, ... , paramN, blueprint my_suit);   //調(diào)用方

具體到項目中,回調(diào)函數(shù)的功能是實現(xiàn)格式轉(zhuǎn)換和保存,調(diào)用借口由底層提供,功能是提供圖像數(shù)據(jù)。這樣調(diào)用方可以不但可以將數(shù)據(jù)保存為bmp,還能通過修改回調(diào)保存成其他格式,實現(xiàn)了函數(shù)的多態(tài)。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容