應用層回調解決問題一:多個窗口接收回調是在底層區分發還是在應用層進行區分收

如題,每一個窗口對應着一個回調,這裏就有個問題,到底是底層用一個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都是一樣的,就沒辦法區分顯示了。

那麼只好在底層就進行分開發。

還有,底層有可能有些地方是異步加載的,也就是你取到的指針可能爲空,但是你又要用它怎麼辦呢?你就把容易出錯的那一句先提前把你要操作的數據送進去,然後在該指針初始化的時候,在指針那個類裏面再重複進行一次就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章