我正在尝试进行以下调用:
PID = pthread_create(&t, NULL, schedule_sync(sch,t1), NULL);
schedule_sync返回一个值,我想能够获取这个值,但是从我读过的关于pthread_create的内容来看,你应该传递一个“void”函数。是否可能获取schedule_sync的返回值,或者我需要修改传入的某个参数?
谢谢帮助!
我正在尝试进行以下调用:
PID = pthread_create(&t, NULL, schedule_sync(sch,t1), NULL);
schedule_sync返回一个值,我想能够获取这个值,但是从我读过的关于pthread_create的内容来看,你应该传递一个“void”函数。是否可能获取schedule_sync的返回值,或者我需要修改传入的某个参数?
谢谢帮助!
pthread_create
返回一个<errno.h>
代码。它不会创建新进程,因此没有新的PID。
要传递指向函数的指针,请使用&
取其地址。
pthread_create
需要一个形式为void *func( void * )
的函数。
因此,假设schedule_sync
是线程函数,
struct schedule_sync_params {
foo sch;
bar t1;
int result;
pthread_t thread;
} args = { sch, t1 };
int err = pthread_create( &args.thread, NULL, &schedule_sync, &args );
.....
schedule_sync_params *params_ptr; // not necessary if you still have the struct
err = pthread_join( args.thread, ¶ms_ptr ); // just pass NULL instead
.....
void *schedule_sync( void *args_v ) {
shedule_sync_params *args = args_v;
....
args->result = return_value;
return args;
}
void
,而是返回一个可转换成任何指针类型的 void*
。pthead_join
不涉及优先级操作,它只是等待其他线程完成并返回其返回值。 - Potatoswatterint pthread_join(pthread_t thread, void **rval_ptr);
void pthread_exit(void *rval_ptr);
说明:
*主要功能:*
在调用pthread_create创建子线程后,使用join来等待子线程结束:
pthread_join(thread_id, (void**)&(p_ret_val_of_child_thread));
子线程处理函数:
ret_val_of_child_thread = 10;
pthread_exit(&ret_val_of_child_thread);
} /* Child Thread Function Handler Ends */
主要功能:在子线程完成执行后,可以通过“*(有效类型转换*) *p_ret_val_of_child_thread”从主线程中捕获其返回值。
pthread_join的第二个参数保存子线程函数处理程序退出值的返回值。
schedule_sync 应该返回 void* 类型,它可以是任何类型。你可以使用 pthread_join 获取该值。
//Function shoulde be look like this
void* schedule_sync(void* someStructureWithArguments);
//Call pthread_create like so
pthread_create(&t, NULL, schedule_sync, locationOfSomeStructureWithArguments);
当线程终止时
pthread_joint(&t, locationToPutReturnValue);
暂时没有开发环境,所以我现在无法给你精确的顺序,但这应该能帮助你入门。