当前位置: 技术问答>linux和unix
pthread_creat 中 传另一个函数 的 参数 问题
来源: 互联网 发布时间:2015-10-27
本文导语: 比如 pthread_creat (&tid, NULL, &doSth, NULL); 如果 void *doSth (int a, int b) 那么a, b怎么传进去呢? | 线程的入口函数原形必须是: void *start(void *clientData); 你的程序可以是: struct ClientData { int a,b; }; void ...
比如 pthread_creat (&tid, NULL, &doSth, NULL);
如果
void *doSth (int a, int b)
那么a, b怎么传进去呢?
如果
void *doSth (int a, int b)
那么a, b怎么传进去呢?
|
线程的入口函数原形必须是:
void *start(void *clientData);
你的程序可以是:
struct ClientData {
int a,b;
};
void *doSth(void *clientData) {
ClientData *cd = (ClientData*)clientData;
...
}
ClientData *cd = (ClientData*)malloc(sizeof(ClientData));
c->a = 1;
c->b = 2;
pthread_creat (&tid, NULL, &doSth, cd);
...
void *start(void *clientData);
你的程序可以是:
struct ClientData {
int a,b;
};
void *doSth(void *clientData) {
ClientData *cd = (ClientData*)clientData;
...
}
ClientData *cd = (ClientData*)malloc(sizeof(ClientData));
c->a = 1;
c->b = 2;
pthread_creat (&tid, NULL, &doSth, cd);
...
|
是的,你可以自定义一个数据对象,该数据对象包含你要传递的a、b信息,然后将该数据对象的地址传进去就ok了。
在线程内部,获取的参数是一个void *的指针类型,你强制转换为你的自定义的数据对象指针即可。
如:
typedef struct myArg
{
int a;
int b;
}sArg, *pArg;
创建线程时:
sArg myarg;
myarg.a = 1;
myarg.b = 2;
pthread_creat (&tid, NULL, &doSth, (void *)&myarg);
线程内部:
pArg *arg = (pArg)myarg;
int aa = arg->a;
int bb = arg->b;
在线程内部,获取的参数是一个void *的指针类型,你强制转换为你的自定义的数据对象指针即可。
如:
typedef struct myArg
{
int a;
int b;
}sArg, *pArg;
创建线程时:
sArg myarg;
myarg.a = 1;
myarg.b = 2;
pthread_creat (&tid, NULL, &doSth, (void *)&myarg);
线程内部:
pArg *arg = (pArg)myarg;
int aa = arg->a;
int bb = arg->b;