我正在尝试创建一个返回特定类型对象的函数。问题是创建线程不接受它。有人可以帮助我使用以下代码吗?
struct thread_args
{
Key *k;
QNode *q;
uint8_t USED_DIMENSION;
};
QLeafNode *st ;
struct thread_args Structthread2;
Structthread1.k=min;
Structthread1.q=start;
Structthread1.USED_DIMENSION=4 ;
pthread_create( &thread1, NULL,(void*)&FindLeafNode, ((void *) &Structthread1));
pthread_join( thread1, (void**)st);
QLeafNode* FindLeafNode (Key *k, QNode * r, uint8_t USED_DIMENSION ){
}
答案 0 :(得分:3)
首先,您的线程功能未正确定义。只有表格的功能:
void* function_name(void* param)
可以传递给pthread_create
。
现在,为了从这个函数返回指向某个东西的指针,你需要两个pthread函数:
pthread_exit(void *value_ptr);
在线程函数内调用此函数以通过value_ptr
和
pthread_join(pthread_t thread, void **value_ptr);
在父线程内调用此方法以等待句柄thread
终止,并检索pthread_exit
中value_ptr
返回的值。
因此,您的代码应该类似于:
struct thread_args
{
Key *k;
QNode *q;
uint8_t USED_DIMENSION;
};
QLeafNode *st ;
struct thread_args Structthread1;
Structthread1.k=min;
Structthread1.q=start;
Structthread1.USED_DIMENSION=4 ;
pthread_create(&thread1, NULL, FindLeafNode, ((void *) &Structthread1));
pthread_join(thread1, (void**)st);
...
void* FindLeafNode (void* param) {
struct thread_args* value = (struct thread_args*) param;
// use value for computations
QLeafNode* result = ... // allocate result with new / malloc
pthread_exit((void*)result);
}
答案 1 :(得分:0)
返回一个堆分配的指针,指向[所以使用new
分配它]你的新对象(在线程中分配,以后可能在加入它的“父”线程中释放,即使用结果)。