在Lua中使用事件系統,進行事件的監聽和派發,移除

2021-08-18 13:26:29 字數 1205 閱讀 6163

在lua中用事件有2中方式:

1.用c#定義好的事件系統,在lua層呼叫,我也寫過一

2.在lua層定義事件系統,**如下

eventsystem={}

--新增事件 eventtype-->事件型別 func-->方法

function

eventsystem.addlistener(eventtype,func)

if(eventtype==nil or func==nil)then

log('在eventsystem.addlistener中eventtype或func為空')

return

end if(eventsystem[eventtype]==nil)then

local

a={}

table.insert(a,func)

eventsystem[eventtype]=a

else

table.insert(eventsystem[eventtype],func)

endend--移除事件

function

eventsystem.removelistener(eventtype,func)

if(eventtype==nil or func==nil)then

log('在eventsystem.removelistener中eventtype或func為空')

return

end local

a=eventsystem[eventtype]

if(a~=nil)then

for k,v in pairs(a) do

if(v==func)then

a[k]=nil

endend

endend--派發事件

function

eventsystem.sendevent(eventtype,...)

if(eventtype~=nil)then

local

a=eventsystem[eventtype]

if(a~=nil)then

for k,v in pairs(a) do

v(...)

endend

endendreturn eventsystem

一定要注意事件有監聽就必須要有移除監聽

mysql中使用事件和儲存過程進行定時業務的執行

因公司專案中有個贈送優惠券功能,此功能需求為 贈送出去的優惠券若24小時內沒有被領取,則自動設定為贈送失敗 過期未被領取 優惠券自動退換給贈送者。初步想法是 在mysql中建立儲存過程進行業務邏輯判斷以及操作庫,然後使用事件定時的調取儲存過程,即可完成需求。一 建立事件 1.事件簡單描述就是可以定時...

mysql儲存過程中使用事件

create definer root localhost procedure createbusiness parameter1 int begin routine body goes here.declare flag int default parameter1 宣告變數flag,將引數值賦給...

C 中使用事件只啟動乙個例項

現有乙個程式,只能啟動乙個例項 啟動時,如果檢測到例項已啟動,則啟用並顯示到最前端 否則啟動乙個新的例項 為此可以通過事件實現。判斷是否已啟動 bool isformexists form frmowner string strevent catch waithandlecannotbeopened...