c++ - 如何输入定义来调用 CreateThread、LPTHREAD_START_ROUTINE、lpStartAddress、ThreadProc

标签 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. 根据 CreateThread 文档中,第三个参数的类型为 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 时,您需要考虑到这一点。 .

关于c++ - 如何输入定义来调用 CreateThread、LPTHREAD_START_ROUTINE、lpStartAddress、ThreadProc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10136985/

相关文章:

c - 动态数组堆栈结构 C

c - winapi - 使用宏在 MessageBox 中显示 int 变量值

c - 函数调用时出现段冲突错误

Windows/Active Directory - 用户/组

c++ - Clang:表达式结果未与三元运算符一起使用

c++ - 字符串常量之前的预期 unqualified-id

c++ - Matlab vs C++找到等于的Matrix的第一个元素

c++ - 如何从框架中知道链接标志?

c - 汇编器到 C 的转换 INCF 和 CPFSLT

windows - Linux 和 Windows 之间的移植如何工作?