【发布时间】:2017-10-20 03:21:24
【问题描述】:
我正在用 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
每次代码运行时输出都不同。
我怎样才能做到这一点?
【问题讨论】:
-
标准问题。您正在将 same 指针传递给所有线程。不保证线程在调用
CreateThread时运行。因此,当他们运行时,无法确定当时p的值是多少。每个线程都需要一个单独的结构, -
另请注意,
p仅在for循环内有效。一旦该循环完成,传递给线程的所有指针都将变为无效。 -
谢谢,那么我该怎么做才能分开
structs? -
通常的方法是 malloc() 为每个线程创建一个结构实例。线程可以在终止之前释放()它们(假设它们显式终止)。
-
.. 或者你可以把一堆东西弄得一团糟。
标签: c windows multithreading