2011-11-16 145 views
0

以下代码返回错误:错误而传递参数到在pthread_create()函数 - 的Visual C++

error C2664: 'pthread_create' : cannot convert parameter 3 from 'void *(__cdecl *)(void)' to 'void *(__cdecl *)(void *)'

error C2664: 'pthread_create' : cannot convert parameter 3 from 'void *(__cdecl *)(void)' to '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); 
} 

环境:

回答

0

不知道这是否回答您的问题(或你的问题是),但这里是一些编译并给你可能期望的输出代码:

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

所以

  1. 有在原型void *的参数,然后这些铸造为int *
  2. 让每个函数返回0
0

请加上“回报NULL:“退出你的线程函数之前。