应用层回调解决问题一:多个窗口接收回调是在底层区分发还是在应用层进行区分收

如题,每一个窗口对应着一个回调,这里就有个问题,到底是底层用一个map(或者vector)保存起来一起发出去应用层来区分接收,还是一开始就区分发? 针对我这个问题,答案就是底层分开发。

刚开始尝试底层统一发,因为底层传来了userData, 就想着是不是可以用this指针进行判断,其实是可以判断的。即使回调函数是static类型,在static类型指针里面不能用this指针,再写一层就好了:

.h中

static bool AsyncOutputDataCB(Data *pData, void* pUserData);
	bool AsyncOutputDataCB(void* pUserData,Data *pData);
	static bool AsyncOutputStatusCB(int n32ID, int wParam, int lParam, void* pUserData);
	bool AsyncOutputStatusCB(void* pUserData, int n32ID, int wParam, int lParam);

.cpp中  (为了举例,我就写一个)

bool AClass::AsyncOutputDataCB(Data *pFrameData, void* pUserData)
{
	if (!pUserData)
	{
		return false;
	}

	AClass *pThis = (AClass *)pUserData;
	return pThis->AsyncOutputDataCB(pUserData ,pFrameData);
	
}

bool AClass::AsyncOutputDataCB(Data *pFrameData, void* pUserData)
{
    AClass *t_wgt = (AClass*)pUserData;
    if(t_wgt == this){
	if (m_Widget)
	{
		m_Widget->outputData(pFrameData);
		return CX_OK;
	}
  return true;
}
	return false;
}

用这种方式其实是可以区分的,但是我接收到的数据就区分不开,因为底层每一次就发多个窗口的回调,那个即使我需要的数据B是每个窗口独有的,多个窗口收到的数据B都是一样的,就没办法区分显示了。

那么只好在底层就进行分开发。

还有,底层有可能有些地方是异步加载的,也就是你取到的指针可能为空,但是你又要用它怎么办呢?你就把容易出错的那一句先提前把你要操作的数据送进去,然后在该指针初始化的时候,在指针那个类里面再重复进行一次就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值