我正在编写一个回调函数,我需要:
1创建一个结构体
2创建一个新线程并将此结构传递给线程,以便它独占使用
3返回一个指向此结构的指针...从回调函数...到主程序。
这将允许通过原始程序和新线程之间的共享内存进行通信。
我假设我必须使用malloc,因为在回调函数中创建的结构的范围仅在函数中。
我无法使其成为静态因为我将创建多个线程,每个线程都有自己的个人结构。
我需要了解这个过程,因为我是新手。
它会这样工作吗?
1 malloc一块内存" sizeof"结构。
2将指向此块的指针传递给新线程并将其返回到主程序
3在新线程中使用此内存创建一个新结构?
我现在已经搜索了一个星期,看不出应该怎么做。
BTW:我无法通过设计修改单线程的主程序。 我只能使这个回调函数产生许多新线程中的一个,并通过这个共享内存进行通信,我想成为一个结构。感谢。
struct myStruct
{
int elem1;
int elem2;
int elem3;
};
int* callBack(some parameters)
{
*p = malloc(sizeof(myStruct));
result = pthead_create( ??, ??, void *(*newThread), *p);
return p;
}
void newThread()
{
// pull off *p from stack?
// somehow use the declared struct to access the malloc mem
p->elem1 = p->elem2 + p->elem3;
}
答案 0 :(得分:1)
通过pthread_create()
创建的线程接受void*
作为参数,因此线程例程的原型应该如下:
void newThread(void* data)
然后,此void*
对应于作为pthread_create
的最终参数传递的指针。然后,您可以将此指针强制转换为适当的数据类型(但请确保您获得正确的数据类型!)。一个例子如下:
void newThread(void* data)
{
struct myStruct* p = data;
p->elem1 = p->elem2 + p->elem3;
}