【发布时间】:2020-06-09 16:15:39
【问题描述】:
我正在尝试运行 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);
...
但它不允许我这样做。关于我做错了什么有什么建议吗?
【问题讨论】:
-
竞争条件:
params变量在线程开始执行时已不存在。 -
您不需要所有 C 级黑客。
std::thread是为 C++ 设计的;改用它。
标签: c++ windows multithreading