如题,每一个窗口对应着一个回调,这里就有个问题,到底是底层用一个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都是一样的,就没办法区分显示了。
那么只好在底层就进行分开发。
还有,底层有可能有些地方是异步加载的,也就是你取到的指针可能为空,但是你又要用它怎么办呢?你就把容易出错的那一句先提前把你要操作的数据送进去,然后在该指针初始化的时候,在指针那个类里面再重复进行一次就可以了。