не может создать тему правильно

0

может кто-то сказать мне, что я делаю неправильно? (Я пропустил остальную часть программы, потому что ее очень долго...)

#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 *)
  • 0
    Ваш компилятор также должен предупредить вас об использовании return; без выражения в функции с не void типом возврата. Если этот оператор возврата когда-либо действительно достигнут, ваша программа имеет неопределенное поведение.
Теги:
multithreading
pthreads

2 ответа

1
Лучший ответ

Вы должны преобразовать указатель 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 противоположное.

2

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;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню