может кто-то сказать мне, что я делаю неправильно? (Я пропустил остальную часть программы, потому что ее очень долго...)
#include <pthread.h>
void *RTPfun(char *client_addr);
int main(int argc, char *argv[])
{
char* client_addr;
pthread_t RTPthread;
// ...
pthread_create(&RTPthread, NULL, &RTPfun, client_addr)
}
void *RTPfun(char * client_addr)
{
// ...
return;
}
Ошибка:
TCPserver.c: In function ‘main: TCPserver.c:74:5: warning: passing argument 3 of ‘pthread_create from incompatible pointer type [enabled by default] /usr/include/pthread.h:225:12: note: expected ‘void * (*)(void *) but argument is of type ‘void * (*)(char *)
Вы должны преобразовать указатель char в пустоту.
#include <pthread.h>
void *RTPfun(void *client_addr);
int main(int argc, char *argv[])
{
char* client_addr;
pthread_t RTPthread;
...
...
pthread_create(&RTPthread, NULL, &RTPfun, (void*)client_addr)
}
void *RTPfun(void * client_addr)
{
char *something = (char*)client_addr;
....
return;
}
Указатели Void используются каждый раз, когда вам нужно передать некоторые данные, и вы не можете заранее знать тип переменной (char *, integer *...). Функция, которую вы передаете pthread_create
принимает значение void * в качестве входных данных, поэтому вы можете отбросить указатель на пустой элемент и сделать в RTPfun противоположное.
Pthread работает с функциями, которые получают void * и return void *.
Вам нужно изменить параметр вашей функции из char * в void *. Вот альтернатива:
#include <pthread.h>
void *RTPfun(void *client_addr);
int main(int argc, char *argv[])
{
char* client_addr;
pthread_t RTPthread;
...
...
pthread_create(&RTPthread, NULL, &RTPfun, client_addr)
}
void *RTPfun(void* data)
{
char *client_addr = (char*)data;
....
return;
}
return;
без выражения в функции с неvoid
типом возврата. Если этот оператор возврата когда-либо действительно достигнут, ваша программа имеет неопределенное поведение.