将结构数组传递给pthread_create

时间:2012-10-20 01:05:58

标签: c++ arrays pointers struct pthreads

所以我有一个结构如下:

struct threadData{
    string filename
    int one;
    int two;
};

我创建了这样的结构数组:

pthread_t threadID[5];
struct threadData *threadP;
threadP = new struct threadData[5];

然后我将这个结构数组传递给一个线程函数,如下所示:

for(int i = 0; i < 5; i++){
    pthread_create(&threadID[i], NULL, threadFunction, (void * ) threadP[i]);
}

这就是我的threadFunction的编写方式:

void *threadFunction(void * threadP[]){

}

我尝试了各种各样的东西,但是我总是得到错误,我传入的内容不正确,我该如何正确地执行此操作以便我可以访问和处理我传入的每个struct对象中的变量?我有一种感觉,我的语法在某处错了,因为我使用了一组结构...我只是不知道哪里或哪些是错的。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

void *threadFunction(void * threadP[]){

函数不能在C ++中包含数组类型的参数,而是参数必须是指针,并且用作函数参数的数组会衰减到指向第一个元素的指针,因此该声明等效于:

void *threadFunction(void ** threadP){

这显然不是传递给pthread_create

的正确类型

您需要传递具有此签名的函数:

void *threadFunction(void * threadP)