静态类成员作为线程函数访问类成员问题
有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; } 展开
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; } 展开
2个回答
Storm代理
2023-08-29 广告
2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I...
点击进入详情页
本回答由Storm代理提供
展开全部
类的静态成员函数本来就是类方法,和实例无关,所以引用aa和bb会出错,编译也过不了啊
mfun虽然是普通成员函数(类的实例方法),但是调用的时候实际上会有一个this指针作为参数,所以在线程中调用的函数原型实际上是void mFunc(C* thisPointer),起线程的时候除了传入函数地址外,还要把this指针作为参数传入。
声明为static的类成员或者成员函数便能在类的范围内共同享,我们把这样的成员称做静态成员和静态成员函数。
在c++类中声明成员时可以加上static关键字,这样声明的成员就叫做静态成员(包括数据成员和成员函数)。
mfun虽然是普通成员函数(类的实例方法),但是调用的时候实际上会有一个this指针作为参数,所以在线程中调用的函数原型实际上是void mFunc(C* thisPointer),起线程的时候除了传入函数地址外,还要把this指针作为参数传入。
声明为static的类成员或者成员函数便能在类的范围内共同享,我们把这样的成员称做静态成员和静态成员函数。
在c++类中声明成员时可以加上static关键字,这样声明的成员就叫做静态成员(包括数据成员和成员函数)。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询