【问题标题】:How to typedef for call CreateThread, LPTHREAD_START_ROUTINE, lpStartAddress, ThreadProc如何为调用 CreateThread、LPTHREAD_START_ROUTINE、lpStartAddress、ThreadProc 键入定义
【发布时间】:2012-04-13 07:42:49
【问题描述】:

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

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

【问题讨论】:

标签: c++ c windows winapi winmain


【解决方案1】:

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

  1. 根据CreateThread 文档,第三个参数的类型为LPTHREAD_START_ROUTINE。您显然已经意识到了这一点,因为您将 infoThread-&gt;func 投射到了这一点。

  2. 因此,____WHAT_HERE2infoThread-&gt;func 的类型)应该是 LPTHREAD_START_ROUTINE

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    • 2019-05-05
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    相关资源
    最近更新 更多