Передать структуру в функцию через pthread - PullRequest
0 голосов
/ 16 ноября 2011

Как передать структуру через pthread_create в мою функцию?Ошибки, которые я продолжаю получать, заключаются в том, что нижнее и верхнее не было определено, что заставило бы меня поверить, что структура не была передана должным образом.Я попытался сослаться на более низкую как arg1.lower, и моя ошибка назад говорит, что я пытаюсь запросить член не класса типа void *

void * mergeSortThread(void *arg1){
 std::ostringstream ostr;
 ostr << "begin: " << lower << " " << upper << endl;
 string message = ostr.str();
 write(2, message.data(), message.length());

}



int main(int argc, char** argv)
{

struct MergeSortThreadArg
{
int * array;
int * temp;
int lower, upper;

};

pthread_attr_t attr;
pthread_attr_init(&attr);
int arr[20];
int temp[20];

MergeSortThreadArg arg;
 arg.array = arr;
 arg.temp = temp;
 arg.lower = 0;
 arg.upper = 19;

pthread_create(th, &attr, mergeSortThread, &arg);
pthread_join(th[z], NULL);
return 0;
}

1 Ответ

1 голос
/ 16 ноября 2011

Определить структуру перед mergeSortThread () и добавить приведение arg1 к struct MergeSortThreadArg * в mergeSortThread ():

void * mergeSortThread(void *arg1){
   struct MergeSortThreadArg *p_MST = (struct MergeSortThreadArg *)arg1;
   std::ostringstream ostr;
   ostr << "begin: " << p_MST->lower << " " << p_MST->upper << endl;
   ...

Более того, более правильно / безопасно распределить структуру и ее поля ( массив и tmp ), чтобы избежать передачи данных нового потока, расположенного в стеке другого потока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...