-2

警告:这是一个示例代码。

我需要定义这个 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
    );
4

1 回答 1

3

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

  1. 根据CreateThread文档,第三个参数是 type LPTHREAD_START_ROUTINE。你显然已经意识到了这一点,因为你对此infoThread->func进行了投射。

  2. 因此,____WHAT_HERE2(的类型infoThread->func)应该是LPTHREAD_START_ROUTINE

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

但是,这还不够,因为在 Windows 上,线程过程使用__stdcall调用约定。在定义thread_function.

于 2012-04-13T07:53:18.327 回答