Windows C ++线程参数传递

问题描述 投票:6回答:4

在Windows c ++中,以下内容创建一个线程:

CreateThread(NULL, NULL, function, parameter, NULL, &threadID);

这将在新线程中运行“function”并将其作为void *或LPVOID传递给“parameter”。

假设我想将两个参数传递给“函数”,除了创建包含两个变量的数据结构然后将数据结构转换为LPVOID之外,还有更好的方法吗?

c++ windows multithreading function-pointers
4个回答
13
投票

不,这是唯一的方法。只需创建一个包含2个数据成员的结构,并将其作为void *传递


1
投票
#include <windows.h>
#include <stdio.h>

struct PARAMETERS
{
    int i;
    int j;
};

DWORD WINAPI SummationThread(void* param)
{
    PARAMETERS* params = (PARAMETERS*)param;
    printf("Sum of parameters: i + j = \n", params->i + params->j);
    return 0;
}

int main()
{
    PARAMETERS params;
    params.i = 1;
    params.j = 1;

    HANDLE thdHandle = CreateThread(NULL, 0, SummationThread, &params, 0, NULL);
    WaitForSingleObject(thdHandle, INFINITE);

    return 0;
}

0
投票

这是将参数传递给线程的标准方法,但是您的新线程可以访问进程中的任何内存,因此只要您提供适当的同步控制,就可以将难以传递的内容或大量数据作为共享资源进行访问。


0
投票

我认为有更好的方法,我在嵌入式代码中一直使用它。它实际上源于将成员方法传递给与CreateThread()非常相似的函数的愿望。需要的原因是因为该类已经具有成员数据(具有适当的setter)所有线程代码所需的参数。 I wrote up a more detailed explanation,如果你有兴趣可以参考。在文章中,您可以看到OSTaskCreate(),只是在心理上替换CreateMethod()。

© www.soinside.com 2019 - 2024. All rights reserved.