C++ 如何通过';这';指向C++;WinAPI线程?
我试图运行C++线程,但也在实例中传递给类本身。我似乎想不出来 我有一个线程参数的结构:C++ 如何通过';这';指向C++;WinAPI线程?,c++,windows,multithreading,C++,Windows,Multithreading,我试图运行C++线程,但也在实例中传递给类本身。我似乎想不出来 我有一个线程参数的结构: struct CLASS_PARAMS { SomeClass* ptr; }; inst->getSomeValue(); ... inst->setSomeValue(someValue); ... 然后调用我的设置方法: void SomeClass::setup() { CLASS_PARAMS params; params.ptr = this; C
struct CLASS_PARAMS {
SomeClass* ptr;
};
inst->getSomeValue();
...
inst->setSomeValue(someValue);
...
然后调用我的设置方法:
void SomeClass::setup() {
CLASS_PARAMS params;
params.ptr = this;
CreateThread(NULL, 0, SetupThread, ¶ms, 0, NULL);
}
在SomeClass::setup()的正上方,我定义了SetupThread
:
DWORD WINAPI SetupThread(LPVOID lpParam) {
CLASS_PARAMS* params = (CLASS_PARAMS *) lpParam;
SomeClass* inst = params->ptr;
....
....
}
但是,我在使用inst
时遇到读取访问冲突。我需要通过线程访问SomeClass
中的其他方法:
struct CLASS_PARAMS {
SomeClass* ptr;
};
inst->getSomeValue();
...
inst->setSomeValue(someValue);
...
但它不允许我。关于我做错了什么有什么建议吗?您在堆栈上分配了类参数
,所以它在使用前会被销毁
动态分配它,传递指针并在线程中释放它
或者,如果只需要传递此
,则不使用包装结构进行传递,只需转换到LPVOID
并返回(但确保使用相同的类指针类型以避免指针调整错误)竞争条件:线程开始执行时,params
变量已不存在。您不需要所有的C级黑客<代码> STD::线程是为C++设计的;用它代替。谢谢你,先生。将此
转换为LPVOID
后,效果非常好。