Передача структуры из массива структур в pthread_create - PullRequest
0 голосов
/ 06 февраля 2011

Я создал массив структур. Я пытаюсь передать один элемент в этом массиве потоку через pthread_create. Я получаю следующие ошибки (они относятся к 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 ]

1 голос
/ 06 февраля 2011

Ваши функции определены правильно, но ваши предварительные объявления неверны.

Измените эти две строки:

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

для соответствия определениям функций:

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

Кстати, отредактируйте свой вопрос, чтобы удалить весь ненужный код :-) И отформатируйте его, пожалуйста: -)

0 голосов
/ 06 февраля 2011

Попробуйте это:

Pthread func ::

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

Вызов pthread_create:

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

Если вы используете код C ++: включите его в началеВы кодируете после включения всех заголовков и пространств имен, чтобы предотвратить предупреждения:

extern "C" {void * serverFunc (void *);}

...