这么写就会执行不了,该怎么改?

pthread_create(&ntid, NULL, thr_fn,(void *) (&value[i], &i));
void *thr_fn(void *arg)
{
string msg;
ftpport ftp;
int i, j;
value[i].desfie = (char *) malloc ( sizeof(char) * 32);
for(j = 0; j < 10; j++)
{
sprintf(value[i].desfie, "%d.dat", j);
}
free(value[i].desfie);
cout<< "new1 thread:" <<endl;
i = *((int*)arg);
ftpIOIN value = *((ftpIOIN*)arg);
return((void *)0);
}

茅侃侃
浏览 60回答 2
2回答

qq_花开花谢_0

涉及多参数传递给线程的,都需要使用结构体将参数封装后,将结构体指针传给线程定义一个结构体struct mypara{var para1;//参数1var para2;//参数2}将这个结构体指针,作为void *形参的实际参数传递struct mypara pstru;pthread_create(&ntid, NULL, thr_fn,& (pstru));函数中需要定义一个mypara类型的结构指针来引用这个参数&nbsp;void *thr_fn(void *arg){mypara *pstru;pstru = (* struct mypara) arg;pstru->para1;//参数1pstru->para2;//参数2&nbsp;}

慕田峪4524236

pthread_create函数接受的参数只有一个void *型的指针,这就意味着你只能通过结构体封装超过一个以上的参数作为一个整体传递。这是pthread_create函数的接口限定的,别人已经明确表明我只接受一个参数,你硬要塞给他两个肯定会出错了。所以通过结构体这种组合结构变通一下,同样实现了只通过一个参数传递,但通过结构指针对结构数据成员的引用实现多参数的传递这种用结构体封装多参数的用法不仅仅用在pthread_create函数中,如果你自己设计的函数需要的参数很多〉=5个以上,都可以考虑使用结构体封装,这样对外你的接口很简洁清晰,你的函数的消费者使用起来也很方便,只需要对结构体各个成员赋值即可,避免了参数很多时漏传、误传(参数串位)的问题结构体内包含结构体完全没有问题,很多应用都这么使用
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python