Visual c++ 将参数传递到pthread_create()函数-visualc++;

Visual c++ 将参数传递到pthread_create()函数-visualc++;,visual-c++,pthreads,Visual C++,Pthreads,以下代码正在返回错误: 错误C2664:“pthread_create”:无法从“void”转换参数3 *(uu cdecl*)(void)“至”void*(u cdecl*)(void*)” 错误C2664:“pthread_create”:无法从“void”转换参数3 *(uu cdecl*)(void)“至”void*(u cdecl*)(void*)” 代码: #包括 #包括 #包括 int main(){ pthread_t f2_螺纹,f1_螺纹; void*f2(),*f1();

以下代码正在返回错误:

错误C2664:“pthread_create”:无法从“void”转换参数3 *(uu cdecl*)(void)“至”void*(u cdecl*)(void*)”

错误C2664:“pthread_create”:无法从“void”转换参数3 *(uu cdecl*)(void)“至”void*(u cdecl*)(void*)”

代码:

#包括
#包括
#包括
int main(){
pthread_t f2_螺纹,f1_螺纹;
void*f2(),*f1();
inti1,i2;
i1=1;
i2=2;
pthread_create(&f1_thread,NULL,f1,&i1);
pthread_create(&f2_thread,NULL,f2,&i2);
pthread_join(f1_线程,NULL);
pthread_join(f2_线程,NULL);
返回0;
}
void*f1(int*x){
int i;
i=*x;
睡眠(1);
printf(“f1:%d”,i);
pthread_退出(0);
}
void*f2(int*x){
int i;
i=*x;
睡眠(1);
printf(“f2:%d”,i);
pthread_退出(0);
}
环境:

  • 使用pWinWin32()的Visual C++ 2008
不确定这是否回答了您的问题(或您的问题是什么),但以下是一些编译代码,并给出了您可能期望的输出:

    #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;
    }
#包括
#包括
#包括
int main(){
pthread_t f2_螺纹,f1_螺纹;
无效*f2(无效*),*f1(无效*);
inti1,i2;
i1=1;
i2=2;
pthread_create(&f1_thread,NULL,f1,&i1);
pthread_create(&f2_thread,NULL,f2,&i2);
pthread_join(f1_线程,NULL);
pthread_join(f2_线程,NULL);
返回0;
}
void*f1(void*x){
int*data=static_cast(x);
int i=*数据;
睡眠(1);
printf(“f1:%d”,i);
pthread_退出(0);
返回0;
}
void*f2(void*x){
int*data=static_cast(x);
int i=*数据;
睡眠(1);
printf(“f2:%d”,i);
pthread_退出(0);
返回0;
}
所以

  • 原型中有void*参数,然后将其转换为int*
  • 让每个函数返回0
  • 请在退出线程函数之前添加“returnnull:”

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