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

标签 c++ windows multithreading

我正在尝试运行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并返回(但请确保使用相同的类指针类型,以避免指针调整错误)

关于c++ - 如何将 'this'指针传递给C++ WinAPI线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62287107/

相关文章:

java - 了解同步块(synchronized block)和内在锁

c++ - 特征:访问 Matrix 4 列的速度慢

c++ - 对 TR1 使用 boost 时,boost 数学特殊函数编译错误

windows - 单个命令中 Windows 多路径中的 mkdir

c++ - 如何从 TCP 连接获取正确的 MAC 地址?

c++ - 我可以强制程序每次都在内存中的同一位置启动吗?

python - python多线程处理打开多个webdrivers时报错

iphone - PerformSelectorInBackground 是否为每次调用生成新线程?

c++ - std::hash 是否保证 "equal" float 的哈希值相等?

c++ - 如何在 box2d 中进行碰撞连接