a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > Delphi > 正文

回調(diào)函數(shù)與Delphi的事件模型

2019-11-18 18:29:34
字體:
供稿:網(wǎng)友
回調(diào)函數(shù)與Delphi的事件模型
 
回調(diào)函數(shù):
回調(diào)函數(shù)是這樣一種機制:調(diào)用者在初始化一個對象(這里的對象是泛指,包括OOP中的對象、全局函數(shù)等)時,將一些參數(shù)傳遞給對象,同時將一個調(diào)用者可以訪問的函數(shù)地址傳遞給該對象。這個函數(shù)就是調(diào)用者和被調(diào)用者之間的一種通知約定,當(dāng)約定的事件發(fā)生時,被調(diào)用者(一般會包含一個工作線程)就會按照回調(diào)函數(shù)地址調(diào)用該函數(shù)。
這種方式,調(diào)用者在一個線程,被調(diào)用者在另一個線程。
在Windows API中有一些函數(shù)使用回調(diào)函數(shù),例如CreateThread、SetWindowLong等。對應(yīng)的回調(diào)函數(shù)定義為如下形式:
function CallBackFunc(Wnd: HWND; Msg, WParam, LParam: Longint): Longint;stdcall;
PRocedure ThreadFunction(Ptr: Pointer);stdcall;
 
消息:
消息也可以看作是某種形式的回調(diào),因為消息也是在初始化時由調(diào)用者向被調(diào)用者傳遞一個句柄和一個消息編號,在約定的事件發(fā)生時被調(diào)用者向調(diào)用者發(fā)送消息。
這種方式,調(diào)用者在主線程中,被調(diào)用者在主線程或者工作線程中。
 
Delphi事件模型:
在Delphi的VCL中有很多可視化組件都是使用事件模型,例如TForm的OnCreate事件,其原理是:在設(shè)計時指定事件函數(shù),在運行時事件觸發(fā),則會調(diào)用在設(shè)計時指定的事件函數(shù)。
在機制上,Delphi事件模型與回調(diào)是一樣的。但具體形式有些區(qū)別,純的回調(diào)函數(shù)是全局函數(shù)的形式,而Delphi事件是對象方法的形式,即可以定義如下回調(diào)函數(shù)類型
type
TCallBackFunc = procedure (pData: Pointer) of object;
這就使得Delphi事件只能在Delphi內(nèi)部使用,而回調(diào)函數(shù)是可以跨語言的。
 
另外還要注意,回調(diào)函數(shù)一般(在Delphi的組件是在主線程中)是在回調(diào)體中創(chuàng)建的線程,因此要有臨界區(qū)保護(hù)。

上一篇:辦公之星控件在Delphi里的使用

下一篇:DELPHI的異常及事務(wù)保護(hù)的常見問題淺析

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網(wǎng)友關(guān)注

主站蜘蛛池模板: 国产精品人成在线播放 | 国产精品久久毛片 | 国产一区二区三区高清 | 在线亚洲精品 | 久久精品国产免费 | 成人精品一区二区三区中文字幕 | 亚洲成人在线观看视频 | 日本在线免费播放 | 国产精品久久久久久一区二区三区 | 日韩av在线影院 | 毛片免费视频 | 欧美a级成人淫片免费看 | 羞羞视频在线观看免费 | 五月天中文字幕 | 国产精品毛片 | 黄网站涩免费蜜桃网站 | 久久一区二区三区四区 | 中文字幕 国产 | 国产精品一区二区三区四区 | 成人免费淫片aa视频免费 | 亚洲怡红院在线 | 91久久久久久久久久久 | 久久精品视频在线观看 | 国产高清视频在线 | 久久久久久久福利 | 欧美成人小视频 | 成人涩涩网站 | 九九精品在线 | 国产老女人精品毛片久久 | 中文字幕日韩在线视频 | 国产成人久久精品77777 | 毛片站| 成人特级毛片 | 五月网婷婷 | 日韩无 | 老牛嫩草一区二区三区眼镜 | 草比网站 | 亚洲自拍电影 | 欧洲精品 | 日本一区二区三区四区不卡视频 | 在线天堂av |