linux c编程中关于ptheread_create 的用法解释
<p>只是强制转换返回值类型.</p> <p>int?pthread_create(pthread_t?*tidp,const?pthread_attr_t?*attr,void?*(*start_rtn)(void),void?*arg)</p> <p>第三个参数接收一个函数的地址</p> <p>按普通变量地址应该这样调用</p> <p>pthread_create(&id1,NULL,(void*)(&mythread),NULL);</p> <p>注意取地址符&</p> <p>但是函数比较特殊,
函数名本来就代表了函数的入口地址。
</p> <p>例如下面这段代码:</p>??#include?<stdio.h>?
#include?<string.h>?
#include?<stdlib.h>?
?
void?test()?
{?
? ? printf("test
");?
}?
?
int?main(int?argc,?char?*argv[])?
{?
? ? printf("%p
",test);?
? ? printf("%p
",&test);?
}<p>输出结果为:</p> <p>0x8048414
0x8048414</p> <p>可见,其实两者是一样的,都指向着这个函数的入口地址。
</p> <p>?</p> <p>所以可以直接不加&</p> <p>而前面的(void?*)只是函数传参数时的一个强制转换,是关于返回值类型的</p>
C++ pthread_create函数的第三个参数void* (*)(void*)老说匹配不上
pthread_create(&tid,NULL,A::repairFileThread,NULL);
线程方法必须是静态方法,你如果写在类里,不能是成员函数,需要加static
这意味着你不能在repairFileThread里访问A实例的成员,不过你可以通过参数传递A的实例
A?a;
pthread_create(&tid,NULL,A::repairFileThread,a);
.....
void?*?A::repairFileThread(void?*arg)
{
??A*?a?=?(A*)arg;
??a->xxx...
}
pthread_create中的函数指针是怎么回事为什么是static去掉static行不行?
可以的。
静态函数的概念。
加上static表示这个函数属于该类,而不是某个实例。
不加上static表示该函数是对象的成员函数。
pthread_create,传两个参数,在函数里面怎么设置?
涉及多参数传递给线程的,都需要使用结构体将参数封装后,将结构体指针传给线程
定义一个结构体
struct mypara
{
var para1;//参数1
var para2;//参数2
}
将这个结构体指针,作为void *形参的实际参数传递
struct mypara pstru;
pthread_create(&ntid, NULL, thr_fn,& (pstru));
函数中需要定义一个mypara类型的结构指针来引用这个参数
void *thr_fn(void *arg)
{
mypara *pstru;
pstru = (* struct mypara) arg;
pstru->para1;//参数1
pstru->para2;//参数2
}
`pthread_create' 问题,请问下面这个报错怎么搞啊
pthread_create是UNIX环境创建线程函数;
1、头文件 #include
;
2、在编译时注意加上-lpthread参数,以调用静态链接库。
因为pthread并非Linux系统的默认库在ubuntu里面用C语言创建线程出错,请大家过来帮帮忙~
pthread_t pthread;
if (pthread_create(&pthread,NULL,thread_recv,NULL))
{
printf("线程创建成功
");
}
还有就是会不会是你编译的时候少了什么参数,后面记得加-lpthread