首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在C++中从线程访问非静态方法

如何在C++中从线程访问非静态方法
EN

Stack Overflow用户
提问于 2013-04-12 02:37:54
回答 1查看 305关注 0票数 0

//在A.h中,我有以下代码

包含"afxwin.h“

包含"msclr\auto_gcroot.h“

使用命名空间系统;

使用msclr::auto_gcroot;

命名空间A

{

公共引用A类

{

公共:

virtual bool Func();

A();

~A();

虚拟布尔连接();

受保护:

DWORD WINAPI threadConnect(void* pParam);

};

公共类AHelper

{

公共:

auto_gcroot A;

};

}

//在A.cpp中,我有以下代码

//这是主DLL文件。

包含"stdafx.h“

包含"A.h“

包括“字符串”

包括"sstream“

包含"stdlib.h“

包含"strsafe.h“

包含"windows.h“

包含"tchar.h“

命名空间A

{

A::A()

{

m_FuncHandle = mpsNil;

}

A::~A()

{

}

bool A::Func()

{

返回true;

}

布尔A::Connect()

{

AHelper* AHelper;

m_retVal = false;

AHelper =新AHelper();

AHelper->A = this;

HANDLE Handle_Of_Thread = 0;

DWORD dwThreadId;

//DWORD WINAPI threadConnect(void* pParam);

//如果我在这里声明函数声明,我会得到

//错误LNK2001:未解析的外部符号"unsigned long __stdcall threadConnect(void *)“(?threadConnect@@YGKPAX@Z)

Handle_Of_Thread = CreateThread (NULL,0,threadConnect,AHelper,0,&dwThreadId);//通过这个代码我得到

//错误C3867:'A::A::threadConnect':函数调用缺少参数列表;请使用'&A::A::threadConnect‘创建指向成员的指针

返回m_retVal;

}

DWORD WINAPI A::threadConnect(void* pParam)

{

AHelper* AHelper = reinterpret_cast(pParam);

//这里我需要调用Func

返回0;

}

}

EN

Stack Overflow用户

发布于 2013-04-12 02:49:27

通常的技巧是有一个接受某种id的静态函数,这个函数决定调用哪个someFunc() (因为每个对象都有自己的someFunc,您显然需要知道是哪个),要么使用查找,要么像C/C++应用程序中常见的那样,直接传递对象的地址。

所以你有类似这样的东西:

代码语言:javascript
复制
static bool thread_func(object o)
{
    return o->someFunc();
}

诀窍在于,静态函数必须是可重入的,因此不会保持线程本身的状态以进行干扰(或者,如果有,请确保其线程安全)。

这一切都假设您正在调用一个不是在线程中创建的对象上的方法。如果你只是在调用一个函数,并且你已经在你的线程中创建了对象,那就调用这个函数吧!

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15956313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档