Я предполагаю, что вы объявили clients_data
как -
struct clients clients_data[Max_threads];
Вы передаете &clients_data
функции, которая имеет тип - struct clients (*)[Max_threads]
.Но функция ожидает struct clients* [Max_threads]
.Это разные вещи.
Чтобы исправить это, вы можете изменить определение функции на -
void* process_joins(struct clients (*data)[Max_threads]){
while (true){
for (int i = 0; i < Max_threads; i++){
if((*data)[i].status == 0){
pthread_join(tclient[(*data)[i].position], (void**) &((*data)[i].info));
(*data)[i].client_number = 0;
}
}
}
}
Но так как эта функция должна ожидать void*
, я бы предложил использовать
void *process_joins(void *data_ptr) {
struct clients (*data)[Max_threads] = data_ptr;
// Rest of the function same as above
}
Теперь, хотя это решит вашу проблему, вам на самом деле не нужен указатель на массив, вы можете просто передать указатель на первый элемент как -
pthread_create(&tjoins, NULL, (void *(*) (void *))process_joins, (void*)clients_data);
и определить свою функцию как -
void* process_joins(void *clients_data_ptr){
struct clients *data = clients_data_ptr;
while (true){
for (int i = 0; i < Max_threads; i++){
if((data[i].status == 0){
pthread_join(tclient[data[i].position], (void**) &(data[i].info));
data[i].client_number = 0;
}
}
}
}