类内定义线程的回调函数问题

C++类成员函数使用时,都会隐式传递一个this指针给该函数,this指针指向该类的对象。函数体可以通过显示调用该指针或直接访问类内成员。
      回调函数是用指针来调用的函数,最常使用的回调函数就是在创建线程时,以一个函数指针以及传递给这个函数多个参数来调用线程函数来创建线程。那么一般的类成员函数是不能用作回调函数的,因为库函数在使用回调函数时,都会传递指定的符合回调函数声明的的参数给回调函数,而类成员函数隐式包含一个this指针参数,所以把类成员函数当作回调函数编译时因为参数不匹配会出错。
    如果类内成员函数调用回调函数怎么实现呢?一般有两种方法:
    1.回调函数声明在类外,全局的
    传类对象指针给回调函数即可使用类内成员,因为回调函数是全局的所以影响了类的封装性
    2.类内成员函数作为回调函数
    利用关键名static声明类内成员函数,因为类静态成员函数只能操作类静态成员,所以函数若想访问类成员,只能通过调用函数传递类对象指针给回调函数,或者在类内声明一个静态指针,该指针指向类,然后在函数中调用该指针访问类成员。

时间: 2024-10-08 20:13:08

类内定义线程的回调函数问题的相关文章

类的成员函数实现线程的回调函数

一般都是用静态函数作为线程的回调函数实现,但是总是感觉不是很顺畅,更改吧,就好像破坏了类的封装性,不改吧,访问实在是麻烦.所以,今天要做的就是让类的成员函数作为线程的回调函数存在,其中使用的一个比较特殊的结构就是 union { void ( *ThreadProc)(LPVOID pvParam); void ( student::*MemberProc)(LPVOID pvParam); } Proc; 联合类,用于转换类成员方法指针到普通函数指针 下面是一个小李子,变量名 就凑活看吧,核心

C++类内定义静态变量

C++类内定义静态变量只限定与integral类型,比如int.char.long.float.double都行,但是string不行 #include<iostream> #include<string> using namespace std; class testClass { public: static const int _dataI = 2; static const long _dataL = 389l; static const char _dataC = 'A'

如果一个类同时继承的两个类都定义了某一个函数会怎样呢

如果一个类同时继承的两个类都定义了某一个函数会怎样呢 | Code4Fun 盒子 盒子 博客 分类 标签 友链 关于 RSS 搜索 入下面所示:类C同时继承了A和B,并且两个都定义了相同的函数,如果这时候编译的话会得到错误. 1 2 3 4 5 6 7 8 9 10 testhir.cpp: In function 'int main(int, const char**)': testhir.cpp:26:7: error: request for member 'printR' is ambi

c++学习笔记之基础---类内声明线程函数的调用

近日需要将线程池封装成C++类,类名为Threadpool.在类的成员函数exec_task中调用pthread_create去启动线程执行例程thread_rounter.编译之后报错如下: spfs_threadpool.cpp: In member function ‘int Threadpool::exec_task(task*)’: spfs_threadpool.cpp:174: error: argument of type ‘void* (Threadpool::)(void*)

AngularJS自己定义标签加入回调函数eval()

function helloworld(name){ console.log("hello!!!!!"+name) } var name="zhangsan"; eval("helloworld(name)"); 代码粘贴到谷歌的控制台能够看到 hello!!!!! zhangsan 能够使用这个功能----返回用户选择的某行数据. <smcs-search-input-table table-uniqueflag="b"

PHP – 在类中使用array_filter时回调函数的问题

了一个类处理好友,其中有一个方法用来同步好友,而这个方法中需要从微博传来的关注列表和粉丝列表中,找到互相关注的用户,记录一下经验,主要还是关于回调函数. 按照我最初的理解,这样写就可以了 private function getMutualFromSina ($focusList) { return array_filter($focusList, "filterSinaList"); } private function filterSinaList ($value) { retur

线程GIL锁 线程队列 回调函数

----------------------------------无法改变风向,可以调整风帆;无法左右天气,可以调整心情.如果事情无法改变,那就去改变观念. # # ------------------------------------------------------------------------------------------------------------# # # --------------[线程队列]-------------- # import queue #先

C++类的成员函数(在类外定义成员函数、inline成员函数)

类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中.它可以被指定为private(私有的).public (公用的)或protected(受保护的). 在使用类函数时,要注意调用它的权限(它能否被调用)以及它的作用域(函数能使用什么范围中的数据和函数).例如私有的成员函数只能被本类中的其它成员函数所调用,而不能被类外调用.成员函数可以访问本类中任何成员(包括私有的和公用的),可

3.1.9 类内部定义的函数:绑定方法与非绑定方法

'''在类内部定义的函数,分为两大类: 一:绑定方法:绑定给谁,就应该由谁来调用,谁来调用就会把调用者当作第一个参数自动传入 1. 绑定到对象的方法:在类内定义的没有被任何装饰器修饰的 2. 绑定到类的方法:在类内定义的被装饰器@classmethod修饰的方法 二:非绑定方法:没有自动传值这么一说了,就类中定义的一个普通工具,对象和类都可以使用 非绑定方法:不与类或者对象绑定,在类内定义的被装饰器@staticmethod修饰的方法 说明:未做任何修饰时:在类内定义的方法是绑定给对象的,对象调