Ошибки при передаче аргументов в функцию pthread_create () - Visual C ++ - PullRequest
0 голосов
/ 16 ноября 2011

Следующий код возвращает ошибку:

ошибка C2664: «pthread_create»: невозможно преобразовать параметр 3 из «void * (__ cdecl *) (void)» в «void * (__ cdecl *)) (void *) '

ошибка C2664: «pthread_create»: невозможно преобразовать параметр 3 из «void * (__cdecl *) (void)» в «void * (__ cdecl *) (void *)»

Код:

#include <windows.h> 
#include <stdio.h>
#include <pthread.h> 
int main()  {
  pthread_t f2_thread, f1_thread; 
  void *f2(), *f1();
  int i1,i2;
  i1 = 1;
  i2 = 2;
  pthread_create(&f1_thread,NULL,f1,&i1);
  pthread_create(&f2_thread,NULL,f2,&i2);
  pthread_join(f1_thread,NULL);
  pthread_join(f2_thread,NULL);

  return 0;

}
void *f1(int *x){
  int i;
  i = *x;
 Sleep(1);
  printf("f1: %d",i);
  pthread_exit(0); 
}
void *f2(int *x){
  int i;
  i = *x;
 Sleep(1);
  printf("f2: %d",i);
  pthread_exit(0); 
}

Среда:

Ответы [ 2 ]

0 голосов
/ 04 апреля 2014

Пожалуйста, добавьте "return NULL:" перед выходом из ваших потоковых функций.

0 голосов
/ 06 декабря 2011

Не уверен, отвечает ли это на ваш вопрос (или каков был ваш вопрос), но вот код, который компилируется и дает то, что вы могли бы ожидать для вывода:

    #include <windows.h> 
    #include <stdio.h>
    #include <pthread.h> 
    int main()  {
      pthread_t f2_thread, f1_thread; 
      void *f2(void*), *f1(void*);
      int i1,i2;
      i1 = 1;
      i2 = 2;
      pthread_create(&f1_thread,NULL,f1,&i1);
      pthread_create(&f2_thread,NULL,f2,&i2);
      pthread_join(f1_thread,NULL);
      pthread_join(f2_thread,NULL);

      return 0;

    }
    void *f1(void *x){
  int* data = static_cast<int*>(x);
      int i = *data;
      Sleep(1);
      printf("f1: %d",i);
      pthread_exit(0); 
      return 0;
    }
    void *f2(void *x){
      int* data = static_cast<int*>(x);
      int i = *data;
      Sleep(1);
      printf("f2: %d",i);
      pthread_exit(0); 
      return 0;
    }

So

  1. Имея void * аргументы в прототипах, затем приводя их к int *
  2. возвращение каждой функции 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...