如何为调用CreateThread,LPTHREAD_START_ROUTINE,lpStartAddress,ThreadProc输入typedef

时间:2012-04-13 07:42:50

标签: c++ c windows winapi winmain

警告:这是示例代码。

我需要定义这个typedef和这个定义以使代码编译得很好。

我有以下代码,我需要知道 __ WHAT_HERE1和_ _WHAT_HERE2应该是什么:

    #include <windows.h>
    #include <winbase.h>

_ifdef _WIN32_
    typedef ____WHAT_HERE1 THREAD_TYPE;
_endif

_ifdef _LINUX_
    typedef void (*THREAD_TYPE);
_endif

    THREAD_TYPE thread_function( void * )
    {

    }

    class ThreadInfo {
    public:
_ifdef _WIN32_
        ____WHAT_HERE2 func;
        LPVOID args;
_endif
_ifdef _LINUX_
    void *(*func) (void*);
    void *args;
_endif
    }

    ThreadInfo *infoThread;


    CreateThread(
        NULL, 
        0, 
        (LPTHREAD_START_ROUTINE) infoThread->func, 
        infoThread->args, 
        0, 
        NULL
    );

1 个答案:

答案 0 :(得分:3)

您可以从粘贴的代码中推断出类型:

  1. 根据CreateThread文档,第三个参数的类型为LPTHREAD_START_ROUTINE。当你将infoThread->func投射到那个时,你显然已经意识到了这一点。

  2. 因此,____WHAT_HERE2infoThread->func的类型)应为LPTHREAD_START_ROUTINE

  3. 由于您可能会将thread_function函数的地址指定给infoThread->func,因此函数的返回值(在代码草图中用____WHAT_HERE1表示)应为返回类型,如LPTHREAD_START_ROUTINE所示。检查LPTHREAD_START_ROUTINE文档表明这是DWORD

  4. 但是,这还不够,因为在Windows上,线程过程使用__stdcall调用约定。在定义thread_function时,您需要考虑到这一点。