将结构数组中的struct传递给pthread_create

时间:2011-02-06 03:17:55

标签: c++ struct pthreads

我创建了一个结构数组。我试图通过pthread_create将此数组中的一个元素传递给一个线程。我收到以下错误(它们用于for循环中的2个pthread_create调用):

/../a2/main.cpp|117|error: invalid conversion from ‘void (*)(serverDataStruct*)’ to ‘void* (*)(void*)’|

/../a2/main.cpp|117|error:   initializing argument 3 of ‘int pthread_create(pthread_t*, const pthread_attr_t*, void* (*)(void*), void*)’|

我看了一遍,似乎我有正确的语法。我将在下面发布我的代码。有人可以帮助我吗?

struct serverDataStruct
{

};

struct clientDataStruct
{

};

void serverFunc(serverDataStruct *serverData);

void clientFunc(int *ticketNum);


struct serverDataStruct serverDataArray[MAX_NUM_SERVERS];   
struct clientDataStruct clientDataArray[MAX_NUM_CLIENTS]; 

int main (  )
{
    for(int i = 0; i < numServers; i++) //create servers
    {
        pthread_create( &serverTID[i], NULL, serverFunc, (void*) &serverDataArray[i]); //PROBLEM LINE*****************************************************************

    }

    for(int i = 0; i < numCustomers; i++)
    {
        pthread_create( &clientTID[i], NULL, clientFunc, (void*) &clientDataArray[i]); //PROBLEM LINE*****************************************************************

    }
}


void *serverFunc(void *serverData)
{

}


void *clientFunc(void *clientData)
{

}

2 个答案:

答案 0 :(得分:1)

您的功能已正确定义,但您的前瞻声明不正确。

更改这两行:

void serverFunc(serverDataStruct *serverData);
void clientFunc(int *ticketNum);

匹配函数定义:

void *serverFunc(void *serverData);
void *clientFunc(void *ticketNum);

顺便说一句,请编辑你的问题以删除所有不必要的代码:-)并格式化它: - )

答案 1 :(得分:0)

试试这个:

Pthread func ::

void serverFunc(void * serverData){
struct clientDataStruct * client = (struct clientDataStruct *) serverData; // just as an //example
....
}

pthread_create call:

pthread_create( &serverTID[i], NULL, serverFunc, &serverDataArray[i]);

如果您使用的是c ++代码: 在包含所有标题和命名空间后,在代码开头包含此内容,以防止出现警告:

extern“C”{void * serverFunc(void *);}