父子进程之间的参数传递和数据返回 pthread_create & pthread_join
2011-10-27 02:43
260 查看
自己睡不着敲着玩的,第一个程序是主线程传递一个结构体地址给子线程,第二个传递字符串,第三个是子线程通过pthread_exit()传递数据,然后pthread_join阻塞那里捕获。
int pthread_create(pthread_t *restrict thread,
const pthread_attr_t *restrict attr,
void *(*start_routine)(void*),
void *restrict arg);
下面说明一下各个参数的含义:
thread :所创建的线程号。
attr :所创建的线程属性,这个将在后面详细说明。
start_routine :即将运行的线程函数。
art :传递给线程函数的参数。
防止main线程提前退出,pthread_join 函数会让主线程阻塞,直到所有线程都已经退出。
int pthread_join(pthread_t thread, void **value_ptr);
thread :等待退出线程的线程号。
value_ptr :退出线程的返回值。
这个程序还有问题,明天处理
我曾经也把后面几行代码改成,
struct mypack *ss
(void *)ss;
pthread_join(tid,&ss);
仍然出错,问了带我的人,一句话解决了。
出错原因,主要是struct mypack * ss;以后,不能使用(void *)把其强制转换成void *类型。
反复出现,要不传入的类型有错误,要不类型正确,但是那个指针指向的something中没有数据结构里所具有的类型。
修改正确以后:
int pthread_create(pthread_t *restrict thread,
const pthread_attr_t *restrict attr,
void *(*start_routine)(void*),
void *restrict arg);
下面说明一下各个参数的含义:
thread :所创建的线程号。
attr :所创建的线程属性,这个将在后面详细说明。
start_routine :即将运行的线程函数。
art :传递给线程函数的参数。
防止main线程提前退出,pthread_join 函数会让主线程阻塞,直到所有线程都已经退出。
int pthread_join(pthread_t thread, void **value_ptr);
thread :等待退出线程的线程号。
value_ptr :退出线程的返回值。
#include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <memory.h> #include <string.h> struct mypack { int a; char b[50]; }; struct mypack *test; void *thr_fun(void *arg) { (struct mypack *)arg; printf("a:%d\nb:%s",test->a,test->b); } int main(int argc, char *argv[]) { int err; test = (struct mypack *)malloc(sizeof(struct mypack)); pthread_t tid; test->a = 1234; // sprintf(test->b,"%s",str); char *str = "ssssssssss"; // memcpy(test->b,str,strlen(str)); sprintf(test->b,"%s",str); err = pthread_create(&tid,NULL,thr_fun,(void *)test); if(err != 0) printf("create thread error\n"); sleep(3); return 0; }
这个程序还有问题,明天处理
#include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <memory.h> #include <string.h> struct mypack { int a; char b[50]; }; struct mypack *test; void *thr_fun(void *arg) { test = (struct mypack *)malloc(sizeof(struct mypack)); test = arg; test->a =1234; char *ss = "sssssssssss"; sprintf(test->b,"%s",ss); pthread_exit((void *)test);//出错位置________________________________________________ } int main(int argc, char *argv[]) { int err; test = (struct mypack *)malloc(sizeof(struct mypack)); pthread_t tid; err = pthread_create(&tid,NULL,thr_fun,NULL); if(err != 0) printf("create thread error\n"); void **ss; pthread_join(tid,ss); (struct mypack **)ss; printf("a:%d\nb:%s\n",(*ss)->a,(*ss)->b); sleep(3); return 0; }
我曾经也把后面几行代码改成,
struct mypack *ss
(void *)ss;
pthread_join(tid,&ss);
仍然出错,问了带我的人,一句话解决了。
出错原因,主要是struct mypack * ss;以后,不能使用(void *)把其强制转换成void *类型。
反复出现,要不传入的类型有错误,要不类型正确,但是那个指针指向的something中没有数据结构里所具有的类型。
修改正确以后:
#include <stdio.h> #include <stdlib.h> #include <pthread.h> struct mypack { int a; char ss[50]; }; struct mypack *test; void *thr_fun(void *arg) { test = (struct mypack *)malloc(sizeof(struct mypack)); test->a = 1234; char *str ="dddddddddd"; sprintf(test->ss,"%s",str); void *swap; swap = test; pthread_exit(swap); } int main(int argc,char *argv[]) { int err; pthread_t tid; err = pthread_create(&tid,NULL,thr_fun,NULL); if(err != 0) printf("create thread error\n"); struct mypack *target; void *ss; pthread_join(tid,&ss); target = ss; printf("a:%d\nb:%s\n",target->a,target->ss); return 0; }
相关文章推荐
- 父子进程之间数据的同步
- 解决undefined reference to `pthread_atfork'/`pthread_detach'/`pthread_create'/`pthread_join'
- AIDL实现不同应用之间跨进程通讯及传递与返回各种数据类型和远程接口回调
- 关于父子进程之间的数据共享
- pthread(一) —— pthread_create & pthread_join
- IOS线程数据篇4之线程之间的同步:synchronized NSlock pthread_mutex_t dispatch_semaphore_create
- linux posix 通过pthread_join获取线程pthread_exit返回的数据
- thread_join.c:(.text+0x6f): undefined reference to `pthread_create' 问题的解决
- 父子进程之间的数据拷贝关系
- javascript与jquery等框架与从服务器返回的数据之间的加载顺序(待空余时间探索)
- pthread线程创建出现undefined reference to `pthread_create' collect2: error: ld returned 1 exit status
- python如何提取某一个固定的字符之间的数据如<img src= >" 内容"
- 序列化 Activity之间进行数据传输 List<Object> Parcelable serializable两种方式
- undefined reference to 'pthread_create' 错误
- 关于fork()父子进程返回值的问题
- 解决undefined reference to `pthread_create'的方法
- 类似undefined reference to 'pthread_create'问题的解决
- pthread_detach pthread_join pthread_create
- Posix线程中undefined reference to 'pthread_create'问题解决
- undefined reference to 'pthread_create'问题解决