C ++ недопустимое преобразование из 'pthread_t' в 'pthread_t * {aka long unsigned int}' 'в' pthread_t * - PullRequest
0 голосов
/ 28 октября 2018

Я новичок в pthreads, пытаюсь заставить этот код работать, но у меня проблемы с созданием потоков.

Я до сих пор не могу понять, как создать pthread с функцией pthread_create (), имеющей объект struct(поток), а также у меня проблемы с выходом из потоков. Я пытаюсь создать 3 потока в моем основном и передать функции, которые выполняют некоторую работу с вектором.

pthread_create withбез аргументов?

Я проверил этот вопрос и попытался исправить, но не смог

enter image description here

Ответы [ 2 ]

0 голосов
/ 28 октября 2018

Вам нужно изменить сигнатуру agency1 и agency2, чтобы она соответствовала типу функции pthread_create принимает

void* agency1(void*) { ... }
void* agency2(void*) { ... }

Также ошибка преобразования связана с тем, что pthread_create получает указательна pthread_t и вы передаете только значение этого типа, вам нужно изменить его на:

at1 = pthread_create(&aT->agencyTread1, NULL, agency1, NULL);
at2 = pthread_create(&aT->agencyTread2, NULL, agency2, NULL);
mt = pthread_create(&mainThread, NULL, mainT, (void *)aT);
0 голосов
/ 28 октября 2018

В отличие от других pthread функций, которые принимают pthread_t по значению, pthread_create принимает pthread_t* (указатель).

Вам нужно что-то вроде:

int errc;
pthread_t mainThread; /*...*/
if ( 0!=(errc=pthread_create(&mainThread, ...))) 
    throw errno_exception(errc); // { errno=errc; perror(0); /*...*/}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...