#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;
}
C++非静态成员函数完全可以作为线程函数
需积分: 50 14 浏览量
2017-07-27
13:31:11
上传
评论 4
收藏 1KB RAR 举报
baidu_32554385
- 粉丝: 1
- 资源: 9
最新资源
- PHP端通过modbus协议跟第三方设备进行数据通信
- navicat安装包亲测可用
- 算法部署-使用OpenVINO部署MobileStyleGAN轻量化高保真图像合成算法-项目源码-优质项目实战.zip
- 基于java实现远程采集华为逆变器使用modbus tcp协议进行通讯的设备数据
- Unity画面共享Spout插件
- 基于C++用modbus实现的工业设备的数据采集程序,支持Tcp、串口
- 完结12章AI Agent智能应用从0到1定制开发
- 15白落梅:你是锦瑟我为流年:三毛的万水千山-3491776.mobi
- Federated Learning-Aided Prognostics in the Shipping 4.0: Princi
- OFDM 的鲁棒频率和定时同步文献部分阅读笔记
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈