Я пытаюсь передать структуру функции, чтобы использовать многопоточность в C. Я действительно не понимаю, как это работает, поэтому я просто пробовал различные синтаксисы, которые дают множество сообщений об ошибках, поэтому я не уверен, был ли ранее задан мой конкретный запрос. Я собрал самый простой код, который я могу сделать, который напоминает то, что я хочу сделать, и он все еще дает мне ошибку, даже если я настроил его на соответствие аналогичным примерам на этом сайте, которые, видимо, работали для людей. Я надеюсь, что я просто пропустил что-то очень простое. Во всяком случае, вот код, который не будет компилировать:Неверный инициализатор при передаче структуры как указатель void *
#include <pthread.h>
#include <stdio.h>
typedef struct {
int i_start;
int i_end;
} my_struct;
void *func(void *ptr) {
int j_start;
int j_end;
my_struct input = (my_struct *) ptr;
j_start = input.i_start;
j_end = input.i_end;
printf("%d %d\n", j_start, j_end);
}
int main() {
my_struct qwerty;
qwerty.i_start = 0;
qwerty.i_end = 1;
pthread_t tid;
pthread_create(&tid, NULL, func, &qwerty);
return 0;
}
Этот конкретный код дает мне ошибку компиляции:
test.c: In function 'func':
test.c:14:20: error: invalid initializer
my_struct input = (my_struct *) ptr;
Как я уже сказал, я попробовал несколько разные вещи, но я не могу сделай это правильно. Спасибо за любую помощь.
'my_struct input = (my_struct *) ptr;' -> 'my_struct input = * (my_struct *) ptr;'. Также 'func' должен вернуть значение. – BLUEPIXY
Обучение C экспериментом приведет вас к тому месту, которое вы не хотите получать. –
Кроме того, у вас может возникнуть другая проблема: основной поток может выйти до того, как поток func может начать или завершить. См. Это в разделе [как обратиться к нему] (http://stackoverflow.com/a/40514326/1275169). –