www.gsyw.net > linux 下pthrEAD_CrEAtE函数参数问题

linux 下pthrEAD_CrEAtE函数参数问题

可以这样声明,但是在调用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传递的是"

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

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;要学会良好的变量命名习惯,这样对你以后有好处.

因为类的成员函数经过处理会变成含有隐藏this指针的函数,与pthread_create的参数要求是不符合的,只能把该成员函数变成静态成员函数:static void* repairFileThread(void *arg), 不过仍然可以通过传递指针this的方式访问对象(arg)再看看别人怎么说的.

这是链接的问题吧,链接命令加上库文件 -pthread 选项

虽然不知道pthread是什么..不过大致了解是什么问题了.pthread_create函数的第三个参数要的函数指针,不是类的成员函数指针,这两个是不一样的.你只能传普通的非成员函数指针进去,也就是把你那些show啊,runexec啊,定义为普通的函数,别定义为类的成员函数

我也碰到同样的问题,我把这一行pthread_attr_setinheritsched(&attr,PTHREAD_EXPLICIT_SCHED);//注释掉就好了,而且attr中的属性值也设置到线程里去了.如果不注释的话,就换成ROOT用户执行,因为修改线程调度策略需要超级用户.

相关搜索:

网站地图

All rights reserved Powered by www.gsyw.net

copyright ©right 2010-2021。
www.gsyw.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com