0

可能重复:
将参数传递给 _beginthreadex

我如何调用而TestFunction2不是使用as包含 3 个附加参数TestFunction1ExecuteLocalThreadbeginthreadexTestFunction2

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

unsigned __stdcall TestFunction2(void* timerPointer, wchar_t *appId, wchar_t *userName, wchar_t *password)
{
    unsigned result =0;
    printf("thread is running\n");
    return result;
}

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

3 回答 3

8

使用 C++11 线程:

std::thread thr(func, arg0, arg1, arg2);
于 2013-01-10T13:29:57.717 回答
3

创建一个包含您要传递的所有数据的结构,然后将指向该数据的指针传递到您的线程入口点

typedef struct MyThreadData {
    void* timerPointer;
    wchar_t *appId;
    wchar_t *userName;
    wchar_t *password;
}; MyThreadData


unsigned int hbThreadID;
void* threadData = calloc(1, sizeof(*threadData));
/* populate threadData */
heartBeatThread = (HANDLE)_beginthreadex(NULL, 0,
                               &TestFunction1, threadData,
                               CREATE_SUSPENDED, &hbThreadID);


unsigned __stdcall TestFunction1(void* ptr) {
    MyThreadData* threadData = (MyThreadData*)ptr;
    unsigned result;
    printf("thread is running\n");
    result = TestFunction2(ptr->timerPointer, ptr->appId, ptr->userName, ptr->password);
    free(threadData);
    return result;
}

unsigned __stdcall TestFunction2(void* timerPointer, wchar_t *appId, wchar_t *userName, wchar_t *password) {
    unsigned result =0;
    return result;
}
于 2013-01-10T13:28:09.213 回答
0

按照建议创建一个结构。如果代码在一个类中并且该类已经包含信息,您也可以使用它:

unsigned __stdcall TestFunctionProxy(void* p)
{
    assert(p);
    MyClass* c = static_cast<MyClass*>(p);
    c->TestFunction();
    return 0;
}

如果由于 TestFunction() 是私有的而这不起作用,请将其设为友元函数。顺便说一句:在挂起状态下启动一个线程然后释放它是不必要的。直接启动线程即可。

最后,请记住,使用适当的 C++ 线程库(例如 Boost.Thread)会使这更加灵活,并为您的问题提供解决方案如何传递更多参数。

于 2013-01-10T13:41:51.510 回答