- 在多线程编程中使用
thread_start(pthread_t * thread_id, THREAD_BODY * thread_workbody, void *thread_arg);
创建子线程时因为最后一个参数需要是指向子线程的文件描述符(int类型)的指针,因此调用时我们会将文件描述符强转为(void *)类型
,可能是系统不同的原因在int类型强转为void类型指针会出现:
warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
这样的错误,为了解决我们可以传该文件描述符的地址即:
eg:thread_start(&tid,thread_worker, &chifd);
再次编译就会解决!
- 若果你的系统不支持int和(void *)之间的类型转换,那么可能还会遇到多线程编程中去让子线程执行其他任务时例如:
thread_worker(void *ctx)
函数传进来的依然是指向子线程的文件描述符的void类型指针,如果直接chifd = (int)ctx
一就会出现上面的问题,可以先将指针强转为(int *)
类型,再取值:
eg:chifd = *(int *)ctx
参考前辈:https://blog.youkuaiyun.com/mybelief321/article/details/9375929