代码之家  ›  专栏  ›  技术社区  ›  onaclov2000

pthread\u create的返回值

  •  4
  • onaclov2000  · 技术社区  · 15 年前

    我正试图打以下电话,

    PID = pthread_create(&t, NULL, schedule_sync(sch,t1), NULL);
    

    schedule\u sync返回一个值,我希望能够获取该值,但是从我读到的关于pthread\u create的内容来看,应该传递一个“void”函数。是否可以获取schedule\u sync的返回值,或者我必须修改传入的某种参数?

    谢谢你的帮助!

    3 回复  |  直到 15 年前
        1
  •  5
  •   Potatoswatter    15 年前

    pthread_create 返回一个 <errno.h>

    &

    pthread\u创建 具有形式功能 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, &params_ptr ); // just pass NULL instead
     .....
    
    void *schedule_sync( void *args_v ) {
       shedule_sync_params *args = args_v;
       ....
       args->result = return_value;
       return args;
    }
    
        2
  •  3
  •   kleopatra Aji kattacherry    12 年前

    为了在父线程(读为主线程)中捕获子线程的返回值。

    你必须:

    1) 把子线和主线连接起来。所以主线程会停留并等待子线程执行任务并退出。

    2) 在退出时捕获子线程的返回值。子线程应调用pthread_exit(&ret_val),其中ret_val保存函数的出口值(子线程正在执行)

    int pthread_join(pthread_t thread, void **rval_ptr);
    
    void pthread_exit(void *rval_ptr);
    

    * 主要功能:

    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 */
    

    主要功能: 子线程执行完毕后,可以在主线程中从“*(valid typecast*)*p\u ret\u valu of \u Child\u Thread”捕获其返回值

    pthread\u join的第二个参数保存子线程函数处理程序exit value的返回值。

        3
  •  1
  •   Dennis Miller    15 年前

    schedule\u sync应该返回void*,可以是任何内容。可以使用pthread\u 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);
    

    推荐文章