如何将'this'指针传递给C++ WinAPI 线程?

How to pass in the 'this' pointer to a C++ WinAPI thread?

本文关键字:C++ WinAPI 线程 指针 this      更新时间:2023-10-16

我正在尝试运行一个C++线程,但也将实例传递给类本身。我似乎想不通。

我有一个线程参数的结构:

struct CLASS_PARAMS {
SomeClass* ptr;
};

然后我调用我的设置方法:

void SomeClass::setup() {
CLASS_PARAMS params;
params.ptr = this;
CreateThread(NULL, 0, SetupThread, &params, 0, NULL);
}

SomeClass::setup()的正上方,我定义了SetupThread

DWORD WINAPI SetupThread(LPVOID lpParam) {
CLASS_PARAMS* params = (CLASS_PARAMS *) lpParam;
SomeClass* inst = params->ptr;
....
....
}

但是,我在使用inst时遇到读取访问权限违规。我还有其他方法SomeClass我需要通过线程访问:

inst->getSomeValue();
...
inst->setSomeValue(someValue);
...

但它不允许我。关于我做错了什么有什么建议吗?

您在堆栈上分配CLASS_PARAMS,因此在使用前将其销毁。

动态分配它,传递指针并在线程中释放它。

或者,如果你只需要传递this,传递它而不进行包装结构,只需强制转换为LPVOID并返回(但一定要使用相同的类指针类型以避免指针调整错误(