C ++将stdcall函数名称作为参数传递

时间:2013-01-10 11:24:38

标签: c++ c

我无法将stdcall函数名“TestFunction”作为参数传递给ExecuteLocalThread并在beginthreadex中使用

unsigned __stdcall TestFunction(void* timerPointer)
{
    unsigned result =0;
    printf("thread is running\n");
    return result;
}

void ExecuteLocalThread(unsigned int (_stdcall *_StartAddress)(void *))
{
    HANDLE   heartBeatThread;
    unsigned int hbThreadID;
    heartBeatThread = (HANDLE)_beginthreadex(NULL, 0 , unsigned int (_stdcall *_StartAddress)(void *)/*&TestFunction*/, (void*)this, CREATE_SUSPENDED, &hbThreadID);
    ResumeThread( heartBeatThread );
}

2 个答案:

答案 0 :(得分:1)

尝试:

heartBeatThread = (HANDLE)_beginthreadex(NULL, 0 , _StartAddress/*&TestFunction*/, (void*)this, CREATE_SUSPENDED, &hbThreadID);

答案 1 :(得分:0)

我强烈建议为函数指针创建一个typedef,并在其他地方使用它:

typedef unsigned int _stdcall (*Pfn)(void*); // typedefs to "Pfn"

void ExecuteLocalThread(Pfn _StartAddress)
{
    HANDLE   heartBeatThread;
    unsigned int hbThreadID;
    heartBeatThread = (HANDLE)_beginthreadex(NULL, 0, _StartAddress, (void*)this, CREATE_SUSPENDED, &hbThreadID);
    ResumeThread( heartBeatThread );
}

键入更容易,更容易阅读,更难搞乱;)使用它可以更轻松地进行投射:将somePtr强制转换为函数指针类型:(Pfn)somePtr