线程池的回调工作函数为什么必须设置成static,类内静态成员函数?

线程池的回调工作函数为什么必须设置成static,类内静态成员函数?

pthread_create(pthread_t *thread_tid, const pthread_attr_t *attr,  void *(*start_routine) (void *), void *arg);  

创建线程的系统调用函数,第三个参数代表回调函数,是一个函数指针void*,第四个参数是该回调函数的参数,类型是void*

若回调函数设置成普通的成员函数,其会带有默认的this指针,就和回调函数的参数void*不能匹配

而设置成静态成员函数,就没有this指针,但是又要在回调函数中使用某个对象的成员,所以必须把this指针作为第四个参数传进去。在使用时再将void* args转换为threadpool的指针

threadpool *pool = (threadpool *)arg;

这和静态成员函数的性质有关, 静态成员函数可以直接访问静态成员变量,不能直接访问普通成员变量,但可以通过参数传递的方式访问。

posted @ 2023-02-17 21:15  预期  阅读(150)  评论(0)    收藏  举报