2011-11-16 43 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:「退出你的線程函數之前。