knrt.net
当前位置:首页 >> linux 下pthrEAD_CrEAtE函数参数问题 >>

linux 下pthrEAD_CrEAtE函数参数问题

问题出在类型转成指针上,和 tid_num应该没关系.chat 参数应该是一个原型类似于下面的函数的函数:void * function(void *arg). 你不应该将chat函数强制转换成 void *

首先:你要知道,线程参数的类型为void * ,但真正传给线程里面的参数不限,可以是int、char 、char *、struct 等等,只要在传给pthread_create函数时强制为void *类型就不会有警告了.在线程处理函数内需要时再强制为你需要的类型即可.至

可以这样声明,但是在调用pthread_create函数的时候需要将线程函数的指针强制类型转换成void *(pthread)(void*),否则编译器会报错.

需要修改的不是pthread_create的第3个参数,而是第3个参数对应的线程函数的函数原型,线程函数的原型是这样的形式:void *(*start_routine) (void *);线程函数的参数和返回值都是一个void指针,而你写的线程函数的参数却是一个int指针,把线程函数的参数修改成void *类型就可以了.如果你需要int型,可以这样写(用强制类型转换,因为线程函数的参数是void *,所以这在线程函数内部经常这样用):void * xxx(void *xa){ printf("Thread function argument was %d\n", *(int *)xa);}

涉及多参数传递给线程的,都需要使用结构体将参数封装后,将结构体指针传给线程定义一个结构体struct mypara{ var para1;//参数1 var para2;//参数2}将这个结构体指针,作为void *形参的实际参数传递struct mypara pstru;pthread_create(&

1. pthread_join 是阻塞函数,运行该函数后主线程会阻塞等待子线程操作结束,你把pthread_join放在主线程输出之后,存在这样的问题:在子线程还没赋值完成前,父线程已经把未操作的值输出了.2.传递参数错误,pthread_create传递的是"

线程循环,进程也不退出的话,线程就可以一直执行了,线程是依赖进程存在的

printf("1\n");printf("2\n");不可能不执行吧,除非你的程序其它地方有问题,比如juzhen1或juzhen2有问题,导致程序挂掉了还有顺便说一句,你这个时间统计根本就是创建两个线程的所消耗的时间,而不是这两个线程执行的时间,如果你要统计这两个线程执行时间,你应该在 pthread_join(pid1, NULL);pthread_join(pid2, NULL);end=clock();这样只有在两个线程执行完后才会执行end=clock();这一句还有 pthread_t pid1, pid2这两句最好改成 pthread_t tid1, tid2;要学会良好的变量命名习惯,这样对你以后有好处.

pthread_create是UNIX环境创建线程函数;1、头文件 #include;2、在编译时注意加上-lpthread参数,以调用静态链接库.因为pthread并非Linux系统的默认库

相关文档
网站首页 | 网站地图
All rights reserved Powered by www.knrt.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com