Во-первых, ваша функция потока не определена правильно. Только функции вида:
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);
}