c++ 知识点 callback

版权声明:www.gudianxiaoshuo.com (古典小说网) 今日头条号: 古典古韵古典小说、讨厌编程 https://blog.csdn.net/shuilan0066/article/details/82851114

主程序中,调用了第三方库,或类,

第三方库,需要实时传递给主程序数据,供主程序处理

这种情况下,用回调解决就非常合适了

回调:传递函数参数地址 到另一个库,另一个库有调用该函数, 这样在该回调函数中处理数据。

主程序端

1)主程序的 回调函数,想在此函数中处理数据

int sendSelfAudoDataCallBack(const char* buf, int length, int nNeedLength,int sample);

2)主函数传递函数地址给第三方类

void SetSelfAudioCallBack()
	{
		m_selfDefinedAudioData.SetCallBack(nbase::Bind(&ChatroomForm::sendSelfAudoDataCallBack, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));
	}

第三方库端

1)设置函数指针

	typedef std::function<int(const char* buf, int length, int nNeedLength,int sample)> AudioCallback;
	AudioCallback pAudio_cb = nullptr;

2)设置传入函数指针参数接口

void SetCallBack(AudioCallback cb /*= nullptr*/)
{
	pAudio_cb = cb;
}

3)第三方库调用该函数

			if (pAudioCB)
			{
				std::string pdata(reinterpret_cast<const char*>(pData), lBytesToWrite);
				std::string result_data = pdata;

				result_data = MutliChannelSoundToSingle(pdata, channel);

				pAudioCB(result_data.c_str(), result_data.size(), netImNeedLength,sample_rate);

			
			}

猜你喜欢

转载自blog.csdn.net/shuilan0066/article/details/82851114