获取线程函数c的参数

时间:2017-05-19 21:46:36

标签: c windows multithreading

我在C中执行一个程序,其中有一些线程,问题是当我想从线程函数接收参数时。

结构如下:

struct parametro
{
  int pl;
};

这是线程函数:

DWORD WINAPI hijo(void *);

DWORD WINAPI hijo(void *p) 
{
  struct parametro* params = (struct parametro*)p;
  printf("\nPosicion %d", params->pl);
}

这是创建线程的代码:

int i;
    for(i=0; i<32; i++)
    {
        struct parametro p;
        p.pl = i;
        hilo = CreateThread(NULL, 0, &hijo, &p, 0, NULL);
    }

然后返回:

Posicion 3
Posicion 5
Posicion 9
Posicion 15
Posicion 19
Posicion 23
Posicion 27
Posicion 30
Posicion 1
Posicion 1
Posicion 1
Posicion 1
Posicion 1
Posicion 1
Posicion 1
Posicion 1

每次代码运行时输出都不同。

我该如何做到这一点?

2 个答案:

答案 0 :(得分:1)

您可以创建特定于线程的变量,为它们分配可以使用的值。例如

struct parametro p[32];

int i;

    for(i=0; i<32; i++)
    {
        p[i].pl = i;
        hilo = CreateThread(NULL, 0, &hijo, &p[i], 0, NULL);
    }

这将确保每个线程获得一个特定的结构实例,该实例被初始化为所需的值。

答案 1 :(得分:0)

我已经解决了问题,我在第二个进程system("pause")之后放置了for,在创建整个线程之前看起来像for结束。