FileFuzzer设计时AfxBeginThread问题

本文探讨了在MFC中正确声明线程函数的方法,解释了为何直接声明线程函数会导致编译错误,并提供了解决方案:通过将类的this指针传递给线程函数并转换此指针,从而实现在线程中访问类的成员变量和成员函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

头文件里面直接声明:

UINT ThreadFunc(LPVOID lpvoid);

这个时候会出现下面的错误:

error C2440: 'type cast' : cannot convert from '' to 'unsigned int (__cdecl *)(void *)'
None of the functions with this name in scope match the target type

 

原因在于线程函数在类中声明时必须是static类型的,但是一旦声明为static类型后,线程就无法访问类里面的成员变量跟成员函数了。

 

最后的解决办法为:
 pThread = AfxBeginThread((AFX_THREADPROC)ThreadFunc, this);

将类的this指针作为线程函数传入,然后在线程函数内转换这个this指针,代码如下:

CFileFuzzView *m_pfuzzview = (CFileFuzzView *)lpvoid;

......

m_pfuzzview->m_pListCtrl->DeleteAllItems();

......

 

在线程函数内部通过类的this指针访问当前类的成员函数及成员变量,可以起到一样的效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值