CreateThread调用错误

CreateThread Call Giving Error

本文关键字:错误 调用 CreateThread      更新时间:2023-10-16

我想在一个类中启动一个线程,该线程反过来将调用同一类成员的函数。下面是我要构建的示例代码。

void CM::ExecuteIt()
{
// Some Calculations
if(/*Condition*/)
{
hThreadArray = CreateThread( 
                NULL,                   // default security attributes
                0,                      // use default stack size  
                MyThreadFunction,       // thread function name
                (LPVOID)&nProcessImage,          // argument to thread function 
                0,                      // use default creation flags 
                &dwThreadIdArray);
}
}
void CM::MyThreadFunction(LPVOID lpParam) 
    { 
    HANDLE hStdout;
    PMYDATA pDataArray;
// Some calculations that needs to be done
    }

但在构建它时,我得到以下错误'CM::MyThreadFunction':函数调用缺少参数列表;使用'&CM::MyThreadFunction'创建一个指向成员"

我不知道我怎么做错了。有人能帮我修一下吗?

不能将非静态成员传递给CreateThread。传递的函数必须是独立的非成员函数,否则就是静态成员函数。一种常见的方法是这样的:

class MyClass {
  void StartThread() {
    CreateThread(..., ThreadProcTrampoline, this, ...);
  }
  static DWORD WINAPI ThreadProcTrampoline(LPVOID param) {
    MyClass* self = static_cast<MyClass*>(param);
    return self->RealThreadProc();
  }
  DWORD RealThreadProc();
};

任何想要传递给线程过程的数据,都可以作为类的数据成员存储。

或者,因为你标记你的问题C++11,使用std::thread。它在传递内容方面更加灵活