2012-10-20 54 views
0

所以我有一个结构如下:传递结构数组到在pthread_create

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[]){ 

} 

我已经尝试过各种东西,但我总能得到什么我传递是不正确的,我应该怎么做这个正确的,这样我可以在每个结构对象我通过访问和处理的变量中的错误在?我有一种感觉,我的语法在某处是错误的,因为我使用了一系列的结构体......我只是不知道错在哪里或是什么。任何帮助,将不胜感激!

+1

它应该是'&threadP [i]'。就这样。 – 2012-10-20 01:10:14

+1

为什么不使用std :: thread? –

+0

或'boost :: thread'? – Recker

回答

1
void *threadFunction(void * threadP[]){ 

函数不能在C++数组类型的参数,而不是参数必须是一个指针,并用作函数参数衰减的指针的第一个元素的阵列,以便声明等效于:

void *threadFunction(void ** threadP){ 

其中明确不正确的类型传递给pthread_create

你需要传递函数与此签名:

void *threadFunction(void * threadP) 
+0

它看起来像你这里的大部分抱怨都是文体。你暗示真正的问题,但不要多解释它。说你不能将数组传递给C++中的函数也有点误导。你可以,但正如你指出的那样,它们会“衰减”到一个指针。但是,在某些情况下,数组语法实际上是必需的 - 例如传递多维数组时。 –

+0

例如:http://www.eskimo.com/~scs/cclass/int/sx9a.html ...无论如何,多维数组与这种情况无关。不过,我只想指出你的陈述有点误导。 –

+0

它需要解释多少?该函数是错误的类型,这就是为什么它不能编译。而当你有一个多维数组时,你仍然没有数组类型的参数,你有一个指向array_的指针。无论如何,我已经删除了文体评论并改写了答案 –