#include "CallbackProxy.h"
#include <stdio.h>
/************************************************************************/
/* 非静态成员函数完全可以作为回调、线程函数 */
/************************************************************************/
class CTest
{
public:
CTest() : m_nData(0){}
DWORD WINAPI MemThreadFun(LPVOID)
{
// 至关重要:本例找到本函数的地址,直接将其强转为线程函数类型,未通过对象来调用本函数,将导致:
// 传入线程函数的参数本来会传递到形参上,但非静态成员函数的调用方法决定了:第一个参数函数的参数为隐式的this,故:传入线程的参数,最终传到了此处的this。
while (true)
{
// 此处this是否为空取决于传入线程的地址是否为空。当然如果故意传一些错误地址,这里把它作为了this,是会出错的。
if (this)
{
printf("thread running... m_nData = %d\n", m_nData);
// 先不考虑线程安全问题
m_nData++;
}
else
{
printf("thread running...\n");
}
Sleep(1000);
}
}
private:
int m_nData;
};
int main(int argc, char* argv[])
{
char aFunAddr[32] = { 0 };
// 只有此方法可以得到函数地址,“<<”因为类型限制取到的地址是错误的
sprintf_s(aFunAddr, "%d", &CTest::MemThreadFun);
UINT32 nFunAddr = atoi(aFunAddr);
CCallbackProxy runner;
CTest obj;
UINT32 nObjAddr = (UINT32)&obj;
runner.Set(nFunAddr);
runner.Run(&obj);
system("pause");
return 0;
}
baidu_32554385
- 粉丝: 1
- 资源: 9
最新资源
- 项目4 旅行信息分享应用
- 基于SpringBoot的学生信息管理系统(前后端源码+数据库+文档+运行截图)
- 【java毕业设计】智慧社区信息集成站(源代码+论文+PPT模板).zip
- 【java毕业设计】智慧社区智慧服务网(源代码+论文+PPT模板).zip
- 【java毕业设计】智慧社区智慧服务台(源代码+论文+PPT模板).zip
- 【java毕业设计】智慧社区智慧信息窗(源代码+论文+PPT模板).zip
- 【java毕业设计】智慧社区智慧管理门(源代码+论文+PPT模板).zip
- 【java毕业设计】智慧社区智慧生活网(源代码+论文+PPT模板).zip
- MATLAB代码:基于模型预测算法的含储能微网双层能量管理模型 关键词:储能优化 模型预测控制MPC 微网 优化调度 能量管理 参考文档:A Two-layer Energy Managemen
- 【java毕业设计】智慧社区智慧信息站(源代码+论文+PPT模板).zip
- 【java毕业设计】智慧社区智慧服务总站(源代码+论文+PPT模板).zip
- 【java毕业设计】智慧社区教育服务门户.zip
- 【java毕业设计】智慧社区健康监测平台.zip
- 【java毕业设计】智慧社区文化娱乐门户.zip
- Java高分大作业-基于SpringBoot的学生信息管理系统(前后端源码+数据库+文档+运行截图)
- 【java毕业设计】智慧社区养老服务平台.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈