静态类成员作为线程函数访问类成员问题

有3个类ABCClassC{Public:Aaa;Bbb;intee;voidmFun();staticFun(PVOID);//用作线程函数}通过以下方法后在Fun内能... 有3个类 A B C
Class C
{
Public:
A aa;
B bb;
int ee;
void mFun();
static Fun(PVOID);//用作线程函数

}
通过以下方法后在Fun内能调用到 C的成员,ee,mFun,但是引用 aa,和 bb,的方法就出错,求教问题!
mFun包含 普通操作也可以直接用,但是如果涉及 aa,bb,也会出错!

#define CALL_IN_THREAD_DEF(ClassName) \
typedef void (ClassName::*CFunPoint)(); \
CFunPoint m_CallFun; \
void ClassName::CallInThread( CFunPoint CallFun, \
CString ShowINF=_T(""), \
CString ErrINF=_T(""), \
BOOL AllowStop=FALSE, \
BOOL ShowDlg=TRUE) \
{ m_CallFun=CallFun; \
MyBeginThread( ThreadFun, \
ShowINF,ErrINF,AllowStop,ShowDlg);} \
\
static UINT ClassName::ThreadFun(LPVOID pParam) \
{ \
ClassName *m_This=(ClassName*)pParam; \
(m_This->*(m_This->m_CallFun))(); \
return 0; }
展开
 我来答
samwang1012
2011-06-15 · 超过39用户采纳过TA的回答
知道答主
回答量:64
采纳率:0%
帮助的人:0
展开全部
类的静态成员函数本来就是类方法,和实例无关,所以引用aa和bb会出错,编译也过不了啊
mfun虽然是普通成员函数(类的实例方法),但是调用的时候实际上会有一个this指针作为参数,所以在线程中调用的函数原型实际上是void mFunc(C* thisPointer),你起线程的时候除了传入函数地址外,还要把this指针作为参数传入
Storm代理
2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I... 点击进入详情页
本回答由Storm代理提供
知道高高手无敌
高粉答主

2015-10-14 · 每个回答都超有意思的
知道大有可为答主
回答量:1.5万
采纳率:6%
帮助的人:1831万
展开全部
类的静态成员函数本来就是类方法,和实例无关,所以引用aa和bb会出错,编译也过不了啊
mfun虽然是普通成员函数(类的实例方法),但是调用的时候实际上会有一个this指针作为参数,所以在线程中调用的函数原型实际上是void mFunc(C* thisPointer),起线程的时候除了传入函数地址外,还要把this指针作为参数传入。
声明为static的类成员或者成员函数便能在类的范围内共同享,我们把这样的成员称做静态成员和静态成员函数。
在c++类中声明成员时可以加上static关键字,这样声明的成员就叫做静态成员(包括数据成员和成员函数)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式