• #include #include #include #include <string.h>//Linux线程编程之线程之间的参数传递/* int pthread_join(pthread_t thread, void **retval); int pthread_create(pthread_t *thread, const pthre
    ```
    #include
    #include
    #include
    #include 
    
    //Linux多线程编程之线程之间的参数传递
    
    /*
    int pthread_join(pthread_t thread, void **retval);
    int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);
    void pthread_exit(void *retval);
    pthread_t pthread_self(void);
    */
    
    /*
    	linux中线程属于第三方库开发
    	安装线程库man手册:
    		sudo  apt-get install   manpages manpages-dev
    		sudo  apt-get install   manpages-posix-dev
    	编译:
    		gcc  -o   bin   src.c   -lpthread  //指定线程库链接
    */
    
    //线程1执行函数
    void *pthread_1(void *arg)
    {
    	printf("pthread 1 run...\n");
    	char *ptr = NULL;
    	ptr = (char *)arg;
    
    	int i =2;
    	while(i--){
    		printf("thread1 i =%d  ptr=%s \n",i,ptr);
    		sleep(1);
    	}
    		
    	char *str = "hello";  //指针指向只读数据区
    //	char str[] ="hello";  //栈空间是独立的,线程结束释放
    	printf("pthread 1 exit\n");
    	printf("-----------------\n");
    	pthread_exit(str);//结束线程1
    
    	return NULL;
    }
    
    struct stu_info{
    	char name[20];
    	int score;
    };
    
    //线程2执行函数
    void *pthread_2(void *arg)
    {
    	printf("pthread 2 run..\n");
    	
    	struct stu_info *st =NULL;
    	st = (struct stu_info *)malloc(sizeof(struct stu_info));
    	if(!st){
    		perror("malloc");
    		pthread_exit(NULL);
    	}
    	
    	strncpy(st->name,"liucong",7);//字符串复制
    	st->score = 100;	
    	
    	sleep(3);
    	printf("pthread 2 exit\n");
    	printf("-----------------\n");
    
    	pthread_exit((void *)st);
    
    	return NULL;
    }
    
    int main()
    {
    	printf("main thread tid = 0x%x\n",pthread_self());
    	char str[] = "hello world";
    	
    	//创建子线程1:传递参数
    	pthread_t tid1;//定义子线程标识符
    	pthread_create(&tid1,NULL,pthread_1,NULL);//pthread_1即线程执行函数
    	
    	//创建子线程2
    	pthread_t tid2;//定义子线程标识符
    	pthread_create(&tid2,NULL,pthread_2,NULL);//pthread_2即线程执行函数
    	
    	
    	char *string =NULL;
    	//阻塞等待子线程1结束,回收子线程结束8kb物理内存
    	pthread_join(tid1,(void **)&string);//阻塞等待的返回值是string,关键
    	printf("string =%s\n",string);
    	
    	struct stu_info *ptr =NULL;
    	
    	//阻塞等待子线程2结束,回收子线程结束8kb物理内存
    	pthread_join(tid2,(void **)&ptr);//阻塞等待的返回值是ptr,关键
    	if(ptr !=NULL){
    		printf("name =%s score=%d\n",ptr->name,ptr->score);
    		free(ptr);
    	}
    
    	//sleep(5);
    	printf("main pthread exit\n");
    	pthread_exit(NULL);  //结束主线程	
    
    	return 0;
    }
    
    /*
    $ ./a.out
    main thread tid = 0xb75286c0
    pthread 1 run...
    thread1 i =1  ptr=(null) 
    pthread 2 run..
    thread1 i =0  ptr=(null) 
    pthread 1 exit
    -----------------
    string =hello
    pthread 2 exit
    -----------------
    name =liucong score=100
    main pthread exit
    */
    
    
    
    
    
    
    
    ```
    展开全文
  • linux线程传递参数 2018-07-09 15:01:27
    #include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#include &lt;pthread.h&gt;... #define NUM_THREADS 8 void *PrintHello(void *args){ int thread_arg;... threa...
  • linuxc多线程参数传递 2014-08-08 10:47:29
    #include #include struct stu {  int age;  char *name;  char *num; }; void thread1(void) {  int i;  for(i=0;i  {  printf("This is a pthread1.\n");  
  • 转自: http://www.cnblogs.com/blankqdb/articles/2651029.html 例子详细解析: 一. pthread_create()与pthread_join()函数 1 #include 2 int pthread_join(pthread_t thread, 3 void **
  • linux c 线程传多个参数 2019-01-04 14:49:50
    新开启的线程传递多个参数用结构体 struct Arges{  char topic[64];  char msg[64];  int len; }; int countThreat=0; void *text3(void *arg) { countThreat++; //pthread_mutex_lock(&amp;mut);  ...
  • 实现在两个子线程通过全局变量传递数据:即在一个子线程中对全局变量的成员进行赋值,在另一个子线程中对全局变量的成员进行取值并显示。 体会同一进程的不同线程共享进程所拥有的全部资源的特性。 思路 首先,定义...
  • 当 调用pthread_create 第三个和第四个参数不为空时,要注意第四个参数传递方法 一段流行的代码: #include #include using namespace std; #define NUM_THREADS 10 void* say_hello(void* args) { int i = ...
  • 如果想传递给线程函数一个整数,又不想...今天上午实验了Linux下的多线程编程,并将多个参数传递给线程要执行的函数。 以下是实验程序的源代码: /*********************** pthread.c ***************************/
  • 线程中函数参数由结构体指针传入 #include &lt;pthread.h&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; typedef struct { char name[20]; int time; int start; int end...
  • 上篇博文中,boss线程其他线程传递的只有一个参数,那么加入是多个参数呢?怎么传递呢?带着这个疑问,我们进入本文的世界,这里传递多个参数,采用结构体,为什么呢?因为结构体里可以根据自己的需要定义多个成员...
  • 我们先来看一个简单的程序: #include #include DWORD WINAPI ThreadFun(LPVOID pM) { printf("%s\n", pM); return 0; } int main() ... HANDLE handle = CreateThread(NULL, 0, ThreadFun, "hel
  • 代码实例 #include&amp;lt;stdio.h&amp;gt; #include&amp;lt;math.h&amp;gt; #include&amp;lt;pthread.h&amp;gt; void *thread_func(void *arg); struct threadarg ...void m
  • Linux线程编程的基本的函数  1线程创建  函数原型:   #include  int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict attr, void *(*start_rtn)(void),...
  • 如何向线程函数传递多个参数
  • 今天实验了Linux下的多线程编程,并将多个参数传递给线程要执行的函数。  以下是实验程序的源代码: //pthread.c #include #include #include struct argument { int num; char string[30]; }; int m
  • #include #include #include void *create(void *arg) { int *num; num=(int *)arg; printf("create parameter is %d\n",*num); return (void *)0; } int main(int argc,char *argv[]) ...
  • 下面总结一下linux下多线程的创建和传参,这里的传的参数是结构体的地址,然后在子线程中输出所传结构体对象的值。 实现过程非常简单,其中pthread_create()创建子线程,pthread_join()是等待阻塞子线程结束,...
  • 线程传递结构体参数 2016-08-22 15:47:09
    声明一个结构体: struct Info { CString strInfo; int nCopunt;...在CPP文件在创建一个线程: Info info; info.nCopunt = 100; CString str; str = "Hello"; info.strInfo = str; HANDLE
  • 最近在linux中用到了多线程的一些知识,网上找了一些有关pthread_create函数应用的例子,感觉收获不少,在这里贴出来以供方便学习之。 . [文件] test1.c ~ 719B  ? 1 2 3 4 5 ...
1 2 3 4 5 ... 20
收藏数 76,771
精华内容 30,708