线程池的回调工作函数为什么必须设置成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;
这和静态成员函数的性质有关, 静态成员函数可以直接访问静态成员变量,不能直接访问普通成员变量,但可以通过参数传递的方式访问。

浙公网安备 33010602011771号