多线程中如何进行参数传递?

  1. 1、参考
  2. 2、多线程中参数传递方法
    1. 2.1 方法说明
    2. 2.2 demo
    3. 2.3 实验结果
  3. THE END!

1、参考

【C】——如何用线程进行参数的传递
c/c++ 多线程 参数传递
向线程传递参数的两种基本方法

2、多线程中参数传递方法

2.1 方法说明

这里讲述的多线程中参数传递是指将主线程中的参数传递到线程中。

int  pthread_create(pthread_t  *  thread,
pthread_attr_t * attr,
void * (*start_routine)(void *),
void * arg);

thread:返回创建的线程的ID
attr:线程属性,调度策略、优先级等都在这里设置,如果为NULL则表示用默认属性
start_routine:线程入口函数,可以返回一个void*类型的返回值,该返回值可由pthread_join()捕获
arg:传给start_routine的参数, 可以为NULL
返回值:成功返回0

最简单的方法就是在创建线程时通过*arg指针参数传递给线程。

2.2 demo

#include <pthread.h>
#include <stdio.h>
#include <windows.h>
struct val{
    int num1;
    int num2;
};

//send a int to arg
void *text(void *arg)
{
    int *p = (int *)arg;
    printf("[debug] arg is %d\n",*p);
    pthread_exit(NULL);
    return 0;
}

//send char to arg
void *text2(void *arg)
{
    char *d = (char *)arg;
    printf("[debug] arg is %s\n",arg);
    pthread_exit(NULL);
    return 0;

}

//send a struct to arg
void *text3(void *arg)
{
    struct val *v = (struct val *)arg;
    printf("[debug] arg is v.num1:%d, v.num2:%d\n",v->num1,v->num2);
    pthread_exit(NULL);
    return 0;

}

int main()
{
    pthread_t pth;
    char val[255] = "This is a string paramter to thread.";
    int arry = 10;
    pthread_create(&pth, NULL, text,(void *)&arry);
    pthread_join(pth, NULL);

    pthread_create(&pth, NULL, text2, (void *)val);
    pthread_join(pth, NULL);    

    struct val v;
    v.num1 = 10;
    v.num2 = 11;
    pthread_create(&pth, NULL, text3, (void *)&v); //一定要用&v因为结构体是值类型;
    pthread_join(pth, NULL);

    system("pause");
    return 0;
}

2.3 实验结果

实验结果


THE END!


本博文只能阅读,谢绝转载,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 2963033731@qq.com

文章标题:多线程中如何进行参数传递?

字数:447

本文作者:Soaring Lee

发布时间:2019-08-25, 15:13:47

最后更新:2021-06-14, 12:13:44

原始链接:https://soaringleefighting.github.io/2019/08/25/【Tools系列】多线程中如何进行参数传递?/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

×

喜欢就点赞,疼爱就打赏

相册