我有一个包含调用create thread的函数的类,需要将自身(this)作为参数传递:
DWORD threadId;
HANDLE h = CreateThread( NULL, 0, runThread, this, 0, &threadId);
我的runThread定义如下:
DWORD WINAPI runThread(LPVOID args)
{
Obj *t = (Obj*)args;
t->funct();
return 0;
}
不幸的是,我在runThread()中得到的对象得到了垃圾。我的Obj类有一个函数指针属性。这可能是问题吗?
class Obj{
void(*funct)();
并在构造函数中:
Obj(void(*f)())
{
funct = f;
}
我的错误在哪里?函数指针,createThread本身还是类型转换?我尝试过任何我能想到的东西。
答案 0 :(得分:1)
假设对象已经正确构造,在调用CreateThread之后,创建线程的对象是否有可能超出范围?这将使您的线程具有垃圾对象。如果没有,用调试器单步执行代码,并在调用线程时查看对象'this'指针,在线程开始处有一个断点,看看它作为参数得到了什么。
答案 1 :(得分:1)
该对象是在我的主要执行线程中创建的。错误是因为该对象在该线程中超出了范围两行,所以当执行该线程时,该地址只有垃圾。