如何将'this'指针传递给C++ WinAPI 线程?
How to pass in the 'this' pointer to a C++ WinAPI thread?
我正在尝试运行一个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
并返回(但一定要使用相同的类指针类型以避免指针调整错误(
相关文章:
- WinAPI挂钩鼠标
- 将执行、作业和WinAPI相乘
- 如何在桌面C++上使用 WinApi 画线
- WINAPI 注册应用程序重新启动时不清除打开的套接字
- Winapi:屏幕截图未显示在窗口中
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- Qt with WinAPI MouseProc
- 如何在"SUBSYSTEM:WINDOWS"下显示并输出到Windows(C++ WinApi)上的
- WinAPI 无法创建按钮
- 将 Win32/WinAPI 应用程序移植到 wxWidgets
- WinAPI 检查窗口是否具有常规标题栏
- 如何使用带有矢量的 winapi 读取进程内存从另一个进程读取缓冲区?
- 将Qt集成到现有的VS项目中以取代WinAPI
- __stdcall - WINAPI vs STDMETHODCALLTYPE vs APIENTRY
- 如何将'this'指针传递给C++ WinAPI 线程?
- Winapi-WM_CLOSE的替代方案
- Winapi - SetWindowLongPtr in ShutdownBlockReason创建/销毁JNI本机代码
- WinAPI C++如何从 64 位应用程序加载资源
- winapi 中的哪个功能检查按钮是否正在关闭控制台?
- WinAPI 窗口在使用 PrintWindow 截屏后不再更新