我在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
每次代码运行时输出都不同。
我该如何做到这一点?
答案 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
结束。