SOUI中事件中心的使用

在soui中为了方便将工作者线程中的处理结果及时反馈到UI线程设计了事件中心来解决此类问题。

在使用事件中心需要注意的事项如下:

首先, 要new一个事件中心对象,既然new了对象当然就要delete,相关代码如下:

	SNotifyCenter *pNotifyCenter = new SNotifyCenter;
        // BLOCK: Run application
        {
            CMainDlg dlgMain;
            dlgMain.Create(GetActiveWindow());
            dlgMain.SendMessage(WM_INITDIALOG);
            dlgMain.CenterWindow(dlgMain.m_hWnd);
            dlgMain.ShowWindow(SW_SHOWNORMAL);
            nRet = theApp->Run(dlgMain.m_hWnd);
        }
	delete pNotifyCenter;

其次,要将事件添加到事件中心,相关代码如下:

	//向事件中心添加事件
	SNotifyCenter::getSingleton().addEvent(EVENTID(EventLoginModule2UI_AccLogin));
	SNotifyCenter::getSingleton().addEvent(EVENTID(EventLoginModule2UI_GetToken));
	SNotifyCenter::getSingleton().addEvent(EVENTID(EventLoginModule2UI_SmsLogin));

再次,将事件跟处理函数绑定,相关代码如下:

事件处理函数定义:

protected:
	bool OnEventLoginModule2UIAccLogin(EventArgs* e);
	bool OnEventLoginModule2UISmsLogin(EventArgs* e);
	bool OnEventLoginModule2UIGetToken(EventArgs* e);
处理函数跟事件绑定:

protected:
	//soui消息
	EVENT_MAP_BEGIN()
		EVENT_HANDLER(EVT_LOGINMODULE2UI_ACCLOGIN, OnEventLoginModule2UIAccLogin)
		EVENT_HANDLER(EVT_LOGINMODULE2UI_SMSLOGIN, OnEventLoginModule2UISmsLogin)
		EVENT_HANDLER(EVT_LOGINMODULE2UI_GETTOKEN, OnEventLoginModule2UIGetToken)
	EVENT_MAP_END()


事件定义相关代码:

class EventLoginModule2UI_AccLogin : public TplEventArgs<EventLoginModule2UI_AccLogin>
{
	SOUI_CLASS_NAME(EventLoginModule2UI_AccLogin,L"event_loginmodule2UI_acclogin")
public:
	EventLoginModule2UI_AccLogin(SObject* pSender) 
		: TplEventArgs<EventLoginModule2UI_AccLogin>(pSender){}
	enum{EventID = EVT_LOGINMODULE2UI_ACCLOGIN};

	DS_LOGINSAASRETINFO*	m_LoginSaasRetInfo;
};

class EventLoginModule2UI_SmsLogin : public TplEventArgs<EventLoginModule2UI_SmsLogin>
{
	SOUI_CLASS_NAME(EventLoginModule2UI_SmsLogin, L"event_loginmodule2UI_smslogin")
public:
	EventLoginModule2UI_SmsLogin(SObject* pSender)
		: TplEventArgs<EventLoginModule2UI_SmsLogin>(pSender){}
	enum{EventID = EVT_LOGINMODULE2UI_SMSLOGIN};

	DS_LOGINSAASRETINFO*	m_LoginSaasRetInfo;
};

class EventLoginModule2UI_GetToken : public TplEventArgs<EventLoginModule2UI_GetToken>
{
	SOUI_CLASS_NAME(EventLoginModule2UI_GetToken, L"event_loginmodule2UI_gettoken")
public:
	EventLoginModule2UI_GetToken(SObject* pSender)
		: TplEventArgs<EventLoginModule2UI_GetToken>(pSender){}
	enum{EventID = EVT_LOGINMODULE2UI_GETTOKEN};

	DS_KFTOKENINFO*		m_pKfTokenInfo;
};

事件触发相关代码:

	EventLoginModule2UI_GetToken* pEvt = new EventLoginModule2UI_GetToken(this);
	pEvt->m_pKfTokenInfo = pInfo;
	SNotifyCenter::getSingleton().FireEventAsync(pEvt);
	pEvt->Release();

事件ID定义为一个全局的宏。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值