1、注册回调函数指针数组
static void *(*p_RegisterCallback[32])(void* arg);
//因为要在线程中调用回调函数,所以函数类型要与pthread_create参数类型一致
typedef void *(*Callback)(void *argv);
2、注册回调函数
void RegisterCallback(int i,Callback fn)
{
p_RegisterCallback[i]=fn;
}
3、调用回调函数
int i=0;
p_RegisterCallback[i](&i);
应用:(线程中调用回调函数)
pthread_t tid[32];
int i=0;
void *(Callback0)(void *argv)
{
int tmp = *(int *)argv;
RegisterCallback_temp0+=(tmp+1);
return nullptr;
}
main
{
RegisterCallback(0,Callback0);
if(....)
{
pthread_create(&tid[i],nullptr,p_RegisterCallback[i],&i]);//&i 不能是NULL
}
}
//注意:如果回调函数中使用参数i,i不能是临时变量,否则回调函数中&i可能得到一个意外的值。
感谢大神的博客: