首页 > 其他分享 >线程池的回调工作函数为什么必须设置成static,类内静态成员函数?

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

时间:2023-02-17 21:22:05浏览次数:37  
标签:函数 静态 void 线程 类内 回调 成员

线程池的回调工作函数为什么必须设置成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;

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

标签:函数,静态,void,线程,类内,回调,成员
From: https://www.cnblogs.com/Yuqi0/p/17131526.html

相关文章

  • QT——setMouseTracking函数
    (一)介绍首先介绍一个变量boolmouseTracking,这个变量保存值表示窗口部件跟踪鼠标是否生效。可以通过函数setMouseTracking()来设置其值,可以通过函数hasMouseTracking()来获......
  • 为什么默认情况下析构函数不是虚拟的
    因为很多类并不是设计来作为基类使用的,虚函数仅在用作派生类对象接口的类中有意义(通常分配在堆上并通过指针或引用访问)。那么我什么时候应该声明一个析构函数为虚拟的呢?......
  • JavaScript函数柯里化
    首先说一下什么是函数柯里化吧 函数柯里化:一种将多参数函数转换成一系列使用一个参数的函数的技术,它在函数式编程中非常常见执行的条件:通用的柯里化函数,它接收一个函数......
  • 多线程等待所有子线程执行完使用总结(3)——CyclicBarrier使用和源码初步分析
    问题背景我们在日常开发和学习过程中,经常会使用到多线程的场景,其中我们经常会碰到,我们代码需要等待某个或者多个线程执行完再开始执行,上一篇文章中(参考https://blog.51cto......
  • 中断正在运行的线程
       publicclassinterruptDemo{//执行过程中中断线程publicstaticvoidmain(String[]args){Threadt=newThread(newRunnable(){......
  • vue 侦听器以及副作用函数使用
    侦听器格式函数格式缺点无法在刚进入页面的时候自动触发。如果监听了一个对象,那就无法监听对象内部属性变化watch:{username(newVal){......
  • python入门之函数function
    """函数function定义:功能,使用一个名称,包装多个语句语法:做def名字(形参):函数体......
  • 线程
    一、线程1、概念线程在一个进程的内部,要同时干多件事,就需要同时运行多个“子任务”,我们把进程内的这些“子任务”叫做线程是操作系统能够进行运算调度的最小单位。它......
  • 函数
    函数性质单射:y=kx+b,一个x只对应唯一一个y,但y可以对应多个x一一对应:若x1!=x2,则y1!=y2(只有一一对应函数才有反函数)函数的有界性非空实数集E中,有实数M,m若存在实数M,满足有X......
  • 函数式编程-Supplier 在实际环境的使用(二)
    有种简洁的Supplier写法如下所示:publicclassSupplierHandler{publicvoidhandler(Supplier<UserInfo>suppplier){//这里面获取数据UserIn......