首页 > 代码库 > 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++ 回调函数 实现 的测试代码
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。