C线程创建问题

时间:2014-11-11 13:19:29

标签: c multithreading

大家好我没遇到这段代码

int file_id;

void* wraper(void* p){  
    return (void)reader((int)p);
}

int main(int argc, char *argv[]){
srandom ((unsigned) time(NULL));
int i;
pthread_t tid[3];
for(i=0;i<3;i++){
     pthread_t * temp = malloc(sizeof(tid[i]));
     file_id=get_random(NB_FILES); 
     pthread_create(&tid[i], NULL,wraper,(void*)file_id); 
}

并且编译器正在给我这个

reader-thread.c: In function ‘wraper’:
reader-thread.c:59:25: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
     return (void)reader((int)p);
                         ^
reader-thread.c:59:5: error: void value not ignored as it ought to be
     return (void)reader((int)p);
     ^
reader-thread.c: In function ‘main’:
reader-thread.c:70:46: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
          pthread_create(&tid[i], NULL,wraper,(void*)file_id); 
                                              ^

目标是创建3个线程并将file_id发送给功能阅读器,我无法看到我做错了什么

1 个答案:

答案 0 :(得分:1)

  1. 您的编译器是正确的,您不应该忽略这一点,在许多架构指针和int上没有相同的宽度。如果您真的需要,正确的类型是使用uintptr_tintptr_t
  2. 如果你必须返回(void),那么将函数的返回(你未向我们展示)转换为void*是没有意义的。
  3. intvoid*的相反方式几乎与1相同。
  4. 实质上,您不应该尝试违反线程函数的调用接口。如果必须传输数据,请传递指向数据的指针。

    此外,当您在此处发布问题时,请确保错误消息与您发布的代码相对应。