1

_beginthreadex を、未知のクラス設計に基づいていない関数ポインターで呼び出すことができるかどうかを知りたいです。例えば:

#include <stdio.h>
#include <process.h>
#include <windows.h>

int myThread(void* data)
{
    printf("ThreadID: %d \n", GetCurrentThreadId());
    return 1;
}

HANDLE callIntThreadFunc(void (*pFunction)(LPVOID), LPVOID pvFuncArgs)
{
    //Expected to fail compilation due to __stcall
    return (HANDLE) _beginthreadex(NULL, NULL, pFunction, (LPVOID) pvFuncArgs, NULL, NULL);
}

int main(int argc, char *argv[])
{
    HANDLE hThread = callIntThreadFunc(myThread, NULL);
    WaitForSingleObject(hThread , INFINITE);

    return 0;
}

関数を変換するときに _beginthread が機能することを認識しています(次のコードによる):

return (HANDLE) _beginthread((void (*)(void*)) pFunction, 0, (LPVOID) pvFuncArgs);

したがって、私の質問は、そのような場合に _beginthreadex を使用できるかどうかです。どんな考えでも大歓迎です。

4

2 に答える 2

0

私が探していた答えを見つけました-ロイスが言ったように、それは実行可能であり、その変換は重要です。次のコードはそれを実現し、スレッドをコンパイルして広めます;-)

return (HANDLE) _beginthreadex(NULL, NULL,(unsigned (__stdcall*)(void*)) pFunction, pvFuncArgs, NULL, NULL);

皆さんありがとう。

于 2013-12-08T20:39:56.000 に答える