/* * Criação de uma nova thread, com passagem de dados. * */ #include #include #include /* Parâmetros para a função */ typedef struct { int x; int y; } Argumentos; /* Retorno da função */ typedef struct { int w; int z; } Retorno; Retorno* f (Argumentos* p_arg) { Retorno *ret = (Retorno*) malloc (sizeof(Retorno)); ret->w = p_arg->x + 1; ret->z = p_arg->y + 1; return ret; } void* f_thread(void *v) { Argumentos *p_arg = (Argumentos*) v; return (void*) f(p_arg); } int main() { pthread_t thr; Argumentos arg; Retorno *ap_ret; /* Prepara os argumentos para envio */ arg.x = 0; arg.y = 1; pthread_create(&thr, NULL, f_thread, (void*) &arg); pthread_join(thr, (void**) &ap_ret); printf("Valor de retorno (apontador): %p\n", ap_ret); printf("Valor de retorno (conteúdo): w = %d z = %d\n", ap_ret->w, ap_ret->z); free(ap_ret); return 0; }