0

重複の可能性:
パラメータを _beginthreadex に渡す

as contains 3 つの追加パラメーターを使用するTestFunction2代わりに呼び出すにはどうすればよいですか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() が非公開であるためにこれが機能しない場合は、フレンド関数にします。ところで: サスペンド状態でスレッドを開始してから解放する必要はありません。スレッドを直接開始するだけです。

最後に、覚えておくと、Boost.Thread などの適切な C++ スレッド ライブラリを使用すると、これがより柔軟になり、さらにパラメーターを渡す方法に関する質問の解決策が得られます。

于 2013-01-10T13:41:51.510 に答える