我正在尝试运行C ++线程,但也将实例传递给类本身。我似乎无法弄清楚。
我有一个线程参数的结构:
struct CLASS_PARAMS {
SomeClass* ptr;
};
然后,我调用我的设置方法:
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
需要通过线程访问:
inst->getSomeValue();
...
inst->setSomeValue(someValue);
...
但它不允许我。关于我在做什么错的任何建议吗?
您CLASS_PARAMS
在堆栈上分配,因此在使用之前将其销毁。
动态分配它,传递指针并在线程中释放它。
另外,如果您只需要this
传递,而无需包装结构就传递它,则只需要LPVOID
前后转换即可(但请确保使用相同的类指针类型,以避免指针调整错误)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句