gpt4 book ai didi

c++ - 如何从 C++ 中的线程访问非静态方法使用 ref 类

转载 作者:太空宇宙 更新时间:2023-11-04 14:08:21 24 4
gpt4 key购买 nike

我有一个类,我想从 .net 调用它。我将类(class)装饰为“ref”。我有一个非静态方法“someFunc”,我打算使用 Thread 调用它。

//在A.h中我有如下代码

include "afxwin.h"

include "msclr\auto_gcroot.h"

using namespace System;

using msclr::auto_gcroot;

namespace A

{

public ref class A
{

public:

virtual bool Func();

A();

~A();

virtual bool Connect();

protected:

DWORD WINAPI threadConnect(void* pParam);

};

public class AHelper
{

public:

auto_gcroot A;

};

}

在 A.cpp 中我有以下代码

// This is the main DLL file.

include "stdafx.h"
include "A.h"
include "string"
include "sstream"
include "stdlib.h"
include "strsafe.h"
include "windows.h"
include "tchar.h"
namespace A
{

A::A()
{
m_FuncHandle = mpsNil;
}
A::~A()
{

}

bool A::Func()
{
return true;
}

bool A::Connect()
{

AHelper* AHelper;

m_retVal = false;
AHelper = new AHelper();

AHelper->A = this;

HANDLE Handle_Of_Thread = 0;

DWORD dwThreadId;

//DWORD WINAPI threadConnect(void* pParam);

//If I declare the function declaration here I am getting

//error LNK2001: unresolved external symbol "unsigned long __stdcall threadConnect(void *)" (?threadConnect@@YGKPAX@Z)

Handle_Of_Thread = CreateThread (NULL, 0, threadConnect, AHelper, 0, &dwThreadId); // with this code I am getting

//error C3867: 'A::A::threadConnect': function call missing argument list; use '&A::A::threadConnect' to create a pointer to member


return m_retVal;
}


DWORD WINAPI A::threadConnect(void* pParam)
{
AHelper* AHelper = reinterpret_cast(pParam);
//Here I need to call Func
return 0;
}



}

最佳答案

使用托管 thread ,而不是非托管类型,以调用托管类型上的方法。

gcnew Thread(gcnew ThreadStart(this, &A::threadConnect));

并更改方法声明以匹配托管线程的预期签名。

void A::threadConnect()
{
// No need for AHelper. The thread that's running will have a reference to
// the 'this' object, so no need for a GCRoot to keep it alive.
}

关于c++ - 如何从 C++ 中的线程访问非静态方法使用 ref 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15976029/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com