2

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 );
}
4

2 に答える 2

1

試す:

heartBeatThread = (HANDLE)_beginthreadex(NULL, 0 , _StartAddress/*&TestFunction*/, (void*)this, CREATE_SUSPENDED, &hbThreadID);
于 2013-01-10T11:53:16.567 に答える
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

于 2013-01-10T12:02:57.630 に答える