linux线程体传递参数



目标与作业


1.学会向线程函数体传递参数;


2.编写代码案例,实现向线程体函数传递参数。



传递参数的两种方法


线程函数只有一个参数的情况:直接定义一个变量通过应用传给线程函数。


例子


#include <iostream>
#include <pthread.h>
using namespace std;
pthread_t thread;
void * fn(void *arg)
{
    int i = *(int *)arg;
    cout<<"i = "<<i<<endl;
    return ((void *)0);
}
int main()
{
    int err1;
    int i=10;
   err1 = pthread_create(&thread, NULL, fn, &i);
    pthread_join(thread, NULL);
}


操作系统以进程为单位分配资源。


线程是执行单位,线程函数有多个参数的情况:这种情况就必须申明一个结构体来包含所有的参数,然后在传入线程函数。


具体请查看代码:


Mularg.c


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
 
typedef struct arg_struct ARG ;
 
struct arg_struct {
char name[10] ;
int age ;
float weight ;
} ;
 
void * thfn ( void * arg )
{
ARG * p = (ARG *) arg ;    
printf( " name is : %s , age is : % d , weight is : %f \ n " , p->name , p->age , p->weight ) ; 
return NULL ;
}
int main(int argc , char *argv [ ] )
{
pthread_t tid ;
ARG arg ;            
int err ;
strcpy ( arg.name , " zhanggd " ) ;
arg.age   = 26 ;
arg.weight = 70 ;
err = pthread_create ( &tid , NULL , thfn , (void *) & arg ) ;     
if( err != 0 ) {
printf( " can’ˉt create thread %s\n", strerror(err) ) ;
exit(1); 
}
return 0 ;
}


程序执行结果:


orphan5.png



【本文由麦子学院独家原创,转载请注明出处并保留原文链接】

logo
© 2012-2016 www.maiziedu.com
蜀ICP备13014270号-4 Version 5.0.0 release20160127
有一位课程导师想与你聊聊

免费电话咨询