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