C++线程回调函数调用类成员函数方法
2014-08-05 21:20
148 查看
目的:
线程回调函数使用类成员函数的目的是可以直接访问类属性,保持封装性方法:
利用this指针传递实例的地址,然后调用实例的成员函数,在成员函数中就可以访问类属性简单示例:
定义一个参数类,其中m_pObj是指向类实例class ThreadArg {
public:
ThreadArg(RfidTcpServer *pObj, int socket)
:m_pObj(pObj), m_socket(socket)
{
}
public:
RfidTcpServer *m_pObj;
int m_socket;
};
在类中定义static成员函数作为中转
class RfidTcpServer { public: RfidTcpServer(IEpcHandler *pHandler); virtual ~RfidTcpServer(); public: void IsAccept(); static DWORD WINAPI ParserPacketRoutine(LPVOID pM); int ParserPacket(int conn); private: SOCKET listenSocket; SOCKET connectSocket; SOCKADDR_IN servAddr; SOCKADDR_IN clntAddr; int serverPort; IEpcHandler *m_pHandler; }; DWORD WINAPI RfidTcpServer::ParserPacketRoutine(LPVOID pM) { ThreadArg *pArg = (ThreadArg *)pM; pArg->m_pObj->ParserPacket(pArg->m_socket); return 0; }
创建线程,将类中的static函数作为线程回调函数
void RfidTcpServer::IsAccept() { int clntAddrLen = sizeof(SOCKADDR_IN); while(1) { connectSocket = accept(listenSocket 4000 , (sockaddr *)&clntAddr, &clntAddrLen); if (connectSocket < 0) { return; } else { ThreadArg *pArg = new ThreadArg(this, connectSocket); //将this指针和参数打包为ThreadArg,作为线程函数的参数 CreateThread(NULL, 0, ParserPacketRoutine, (LPVOID)pArg, 0, NULL); } } }
相关文章推荐
- c++线程回调函数调用类成员函数方法-续集
- 回调函数调用类成员函数的方法
- C++成员函数指针的另类调用方法
- 非static成员函数通过类名::来调用,空指针调用成员方法不出错!
- 回调函数调用类成员函数的方法
- boost在lambda表达式中调用占位符参数的成员函数的方法
- 对类成员函数的另类调用方法
- C++ 静态成员函数调用非静态成员函数方法
- 解决类间成员函数调用的两个方法
- 在外部调用私有成员函数的方法
- 回调函数调用类成员函数的方法
- 回调函数调用类成员函数的方法 -转贴
- 不知道子类成员函数的情况下,用父类方法调用子类的成员函数指针,需增加/vmg命令
- 回调函数调用类成员函数的方法
- 类成员函数返回(成员)函数指针,包装类调用外部类的成员方法
- C++静态函数中调用非静态成员函数或变量(方法1静态变量的方法)
- 获取类成员函数地址和调用的方法
- c调用c++函数(包括类成员函数)的方法
- FireBreath学习之三 JSAPIAuto类的成员函数说明和插件调用DOM方法/属性一般形式
- C++ 类成员函数回调调用方法