首页 > 代码库 > C++ 回调函数 实现 的测试代码

C++ 回调函数 实现 的测试代码

最近项目里使用了异步Socket,使用的是完成端口做的e; Accept,receive,send 等完全的异步实现(多线程)

然后 又要多个端口使用, 后来想到包装下完成端口Socket,然后当有事件是触发回调函数,就不用手动搞N多个线程什么的

如是,测试例子如下:

#include "stdafx.h"#include <string.h>#include <stdlib.h>#include <stdio.h>//回调函数 实现 的测试#define __CallBackTestFun__/*回调函数**回调函数实现体必须是静态方法,并且应该使用"__stdcall"声明;  应该接受参数转换成本类指针,然后才能操作本类的成员**即:static void __stdcall Fun(void* pthis,...)*/#ifdef __CallBackTestFun__typedef void(__stdcall*POnData)(void*,unsigned int,void*) ;typedef void(__stdcall*POnReccive)(void*,unsigned int) ;class TSocketObj{private:	POnData pOnData,pp;	POnReccive pOnReccive;	void* tag;protected:	void OnData(){pOnData(tag,123,"1234");}public:	int No;//	unsigned char type; //0:TCP  1:UDP	unsigned int sock;	void* pdata;	char name[21];	TSocketObj *next,*prior;	TSocketObj(){memset(this,0,sizeof(TSocketObj));}//初始化 也很重要	TSocketObj(void* Obj){		memset(this,0,sizeof(TSocketObj));		tag=Obj;		printf("\nObj:%x\n",tag);	}	void SetCallBack(void* Obj,POnData onData,POnReccive onReccive){		tag=Obj;pOnData=http://www.mamicode.com/onData;pOnReccive=onReccive;"\nThis is:%d   Sock:%d\tname:%s",((TSocket*)pThis)->m,no,d);	}	friend void __stdcall OnReccive(void* pThis,unsigned int d)	{		printf("\n\tNo:%d\n",d);	}	//这个不能做回调函数	void __stdcall OnGo(void* pThis,unsigned int no,void* d)	{		printf("\n\tOnGo m:%d\n",m);	}	void Set(int d){			m=1000+d;			socks.No=d;			socks.sock=100*d+78;			sprintf(socks.name,"Sock_%d",d);			socks.SetCallBack(this, OnData, OnReccive);			//POnData p=&(this->OnGo);			//socks.SetP((void*)&this->OnGo);	}	void show(){socks.Go();}};#endifint main(int argc, char* argv[]){	int iarr[10]={1,5,3,2,7,4,9,6,8,0};//BrdNo//回调函数 实现 的测试#ifdef __CallBackTestFun__	TSocket tr;	tr.Set(7);	tr.show();	TSocket ty;	ty.Set(8);	ty.show();#endif	scanf("%d",iarr);	return 0;}

  这是个完整的例子,转载请注明:http://www.cnblogs.com/lzpong/

 

C++ 回调函数 实现 的测试代码