在网络消息处理中经常要用到回调机制,有的是来处理异步网络数据通信问题(摄器模式),有的是来处理订阅问题(观察者模式)。
在C/C++开发用用的很多,一下是一些简单的例子(部分例子代码不全,需自行补全)
一、C的回调函数是比较简单的,
例如:
int myFunction(int num)
{
printf("myFunction num:%d\n",num);
return -1;
}
//定义FUNC类型是一个指向函数的指针
//params[in]为int类型
//return为int类型
typedef int (*FUNC)(int);
int _tmain(int argc, _TCHAR* argv[])
{
FUNC callback = (FUNC)&myFunction;
int num = 10;
callback(10);
return 0;
}
执行结果:myFunction num:10
二、对于C++来说如何实现回调函数呢?
1、最原始的方法我们可以在类外定义全局的函数实现回调,参数上通过传递this指针来达到处理当前对象的一些业务。
例如:
typedef bool (*FUNC1)(void* pCFunc);
bool onGetFunName(void* pCFunc)
{
if(pCFunc != NULL)
{
CFunc* fuc = (CFunc*)pCFunc;
bool ret = fuc->getName();
printf("name is:%d\n", ret);
return true;
}
return false;
}
CFunc::CFunc(void)
{
}
CFunc::~CFunc(void)
{
}
bool CFunc::getName()
{
printf("getName ");
return true;
}
bool CFunc::showName()
{
FUNC1 callback = (FUNC1)&onGetFunName;
return onGetFunName(this);
}
执行结果:getName name is:1
2、一般来说我们更想让对象之前共享一个回调函数,所以很多时候用类函数来实现回调函数,例如我们一个简单的线程测试类:
//***************************************************************//
class MyThread
{
public:
M
在C/C++开发用用的很多,一下是一些简单的例子(部分例子代码不全,需自行补全)
一、C的回调函数是比较简单的,
例如:
int myFunction(int num)
{
printf("myFunction num:%d\n",num);
return -1;
}
//定义FUNC类型是一个指向函数的指针
//params[in]为int类型
//return为int类型
typedef int (*FUNC)(int);
int _tmain(int argc, _TCHAR* argv[])
{
FUNC callback = (FUNC)&myFunction;
int num = 10;
callback(10);
return 0;
}
执行结果:myFunction num:10
二、对于C++来说如何实现回调函数呢?
1、最原始的方法我们可以在类外定义全局的函数实现回调,参数上通过传递this指针来达到处理当前对象的一些业务。
例如:
typedef bool (*FUNC1)(void* pCFunc);
bool onGetFunName(void* pCFunc)
{
if(pCFunc != NULL)
{
CFunc* fuc = (CFunc*)pCFunc;
bool ret = fuc->getName();
printf("name is:%d\n", ret);
return true;
}
return false;
}
CFunc::CFunc(void)
{
}
CFunc::~CFunc(void)
{
}
bool CFunc::getName()
{
printf("getName ");
return true;
}
bool CFunc::showName()
{
FUNC1 callback = (FUNC1)&onGetFunName;
return onGetFunName(this);
}
执行结果:getName name is:1
2、一般来说我们更想让对象之前共享一个回调函数,所以很多时候用类函数来实现回调函数,例如我们一个简单的线程测试类:
//***************************************************************//
class MyThread
{
public:
M