返回类型Pthread使用C ++创建

时间:2012-03-19 19:14:59

标签: c++ multithreading pthreads

我正在尝试创建一个返回特定类型对象的函数。问题是创建线程不接受它。有人可以帮助我使用以下代码吗?

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 ){

}

2 个答案:

答案 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_exitvalue_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分配它]你的新对象(在线程中分配,以后可能在加入它的“父”线程中释放,即使用结果)。