http://blog.csdn.net/qustdjx/article/details/7710526
版权声明:本文为博主原创文章,未经博主允许不得转载。
线程的创建:
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
struct member
{
int a;
char *s;
};
void *create(void *arg)
{
struct member *temp;
temp=(struct member *)arg;
printf("member->a=%d \n",temp->a);
printf("member->s=%s \n",temp->s);
//exit(0);/*进程中任何一个线程调用exit或_exit,那么整个进程都会终止*/
return (void*)0;
}
int main(int argc,char**argv)
{
pthread_t tidp;
int error;
struct member*b;
/*为结构体指针b分配内存并赋值*/
b=(struct member*)malloc(sizeof(struct member));
b->a=4;
b->s="hello";
/*创建线程并运行线程执行程序*/
error=pthread_create(&tidp,NULL,create,(void*)b);//create函数里的参数必须为,void * (*)(void *),故将b转化为 void*
if(error)
{
printf("pthread is not created..\n");
}
sleep(1);
printf("pthread is created...\n");
return 0;
}
-
顶
- 0
-
踩
- 0
使用堆内存,然后传递一个指向这个结构体的指针就可以了,
或者直接向子函数传递结构体变量.
比如:
#include <stdio.h>
#include <malloc.h>
typedef struct STRC_def{
int i;
int j;
}STRC;
int Func1(STRC * pSTRC);
int Func2(STRC aSTRC);
int main()
{
STRC * a =(STRC *)malloc(sizeof(STRC));//使用堆内存
STRC b;//使用栈内存
a->i=0;//初始化
a->j=0;
b.i=0;
b.j=0;
Func1(a);//传递指针
Func2(b);//传递变量
printf("a: %d %d\nb: %d %d\n",a->i,a->j,b.i,b.j);//结果应该是 a: 1 2 \n b: 0 0
//因为传递指针使用的是同一个存储位置,而传递变量使用的是内容复制的存储位置
return 0;
}
int Func1(STRC * pSTRC)
{
pSTRC->i=1;
pSTRC->j=2;
return 0;
}
int Func2(STRC aSTRC)
{
aSTRC.i=3;
aSTRC.j=4;
return 0;
}