Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何通过';这';指向C++;WinAPI线程?_C++_Windows_Multithreading - Fatal编程技术网

C++ 如何通过';这';指向C++;WinAPI线程?

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

我试图运行C++线程,但也在实例中传递给类本身。我似乎想不出来

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

struct CLASS_PARAMS {
    SomeClass* ptr;
};
inst->getSomeValue();
...
inst->setSomeValue(someValue);
...
然后调用我的设置方法:

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
中的其他方法:

struct CLASS_PARAMS {
    SomeClass* ptr;
};
inst->getSomeValue();
...
inst->setSomeValue(someValue);
...

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

您在堆栈上分配了
类参数
,所以它在使用前会被销毁

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


或者,如果只需要传递
,则不使用包装结构进行传递,只需转换到
LPVOID
并返回(但确保使用相同的类指针类型以避免指针调整错误)

竞争条件:线程开始执行时,
params
变量已不存在。您不需要所有的C级黑客<代码> STD::线程是为C++设计的;用它代替。谢谢你,先生。将
转换为
LPVOID
后,效果非常好。