回调函数

QT 回调函数来龙去脉

拜拜、爱过 提交于 2019-12-24 21:33:43
一、回调函数   回调函数就是一个通过函数指针调用的函数。A类将一个函数的地址作为参数传给B类的一个函数,此时A类就不用关心这个函数的执行了。当B类里面触发了某个特定的条件,B类调用这个回调函数,进行响应。 二、回调函数的例子 (1)主窗体 //MainWindow.h public : //静态方法的回调函数 static void setPos ( MainWindow * m , const QPointF & r ) ; void setLinePos ( const QPointF & r ) ; //MainWindow.cpp------------------------------------------------------ MainWindow :: MainWindow ( QWidget * parent ) : QMainWindow ( parent ) , ui ( new Ui :: MainWindow ) { ui - > setupUi ( this ) ; //widget提升为了子部件 //把对象实例的指针或引用做为参数传给子部件。就能找到主窗口中的控件。 ui - > widget - > setCallbackFunc ( this , setPos ) ; } MainWindow :: ~ MainWindow ( ) {

select、poll、epoll之间的区别总结[整理]

狂风中的少年 提交于 2019-12-24 07:25:06
 select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。 但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的 ,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。关于这三种IO多路复用的用法,前面三篇总结写的很清楚,并用服务器回射echo程序进行了测试。连接如下所示: select: http://www.cnblogs.com/Anker/archive/2013/08/14/3258674.html poll: http://www.cnblogs.com/Anker/archive/2013/08/15/3261006.html epoll: http://www.cnblogs.com/Anker/archive/2013/08/17/3263780.html   今天对这三种IO多路复用进行对比,参考网上和书上面的资料,整理如下: 1、select实现 select的调用过程如下所示: (1)使用copy_from_user从用户空间拷贝fd_set到内核空间 (2)注册回调函数__pollwait (3)遍历所有fd

select、poll、epoll之间的区别总结[整理]

怎甘沉沦 提交于 2019-12-24 07:24:32
   select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。 但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的 ,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。 关于这三种IO多路复用的用法,前面三篇总结写的很清楚,并用服务器回射echo程序进行了测试。连接如下所示: select: http://www.cnblogs.com/Anker/archive/2013/08/14/3258674.html poll: http://www.cnblogs.com/Anker/archive/2013/08/15/3261006.html epoll: http://www.cnblogs.com/Anker/archive/2013/08/17/3263780.html   今天对这三种IO多路复用进行对比,参考网上和书上面的资料,整理如下: 1、select实现 select的调用过程如下所示: (1)使用copy_from_user从用户空间拷贝fd_set到内核空间 (2)注册回调函数__pollwait (3)遍历所有fd

Springboot整合rabbitMq

喜你入骨 提交于 2019-12-23 20:59:45
该篇文章内容较多,包括有rabbitMq相关的一些简单理论介绍,provider消息推送实例,consumer消息消费实例,Direct、Topic、Fanout的使用,消息回调、手动确认等。 (但是关于rabbitMq的安装,就不介绍了) 在安装完rabbitMq后,输入http://ip:15672/ ,是可以看到一个简单后台管理界面的。 在这个界面里面我们可以做些什么? 可以手动创建虚拟host,创建用户,分配权限,创建交换机,创建队列等等,还有查看队列消息,消费效率,推送效率等等。 以上这些管理界面的操作在这篇暂时不做扩展描述,我想着重后面实例里会使用到。 首先先介绍一个简单的一个消息推送到接收的流程,提供一个简单的图: RabbitMq -JCccc黄色的圈圈就是我们的消息推送服务,将消息推送到 中间方框里面也就是 rabbitMq的服务器,然后经过服务器里面的交换机、队列等各种关系(后面会详细讲)将数据处理入列后,最终右边的蓝色圈圈消费者获取对应监听的消息。 常用的交换机有以下三种,因为消费者是从队列获取信息的,队列是绑定交换机的(一般),所以对应的消息推送/接收模式也会有以下几种: Direct Exchange 直连型交换机,根据消息携带的路由键将消息投递给对应队列。 大致流程,有一个队列绑定到一个直连交换机上,同时赋予一个路由键 routing key 。

JS异步编程怎么回事 如何能学好Web前端开发

谁都会走 提交于 2019-12-23 15:55:59
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> JS异步编程怎么回事?如何能学好Web前端开发?JavaScript是Web前端开发三要素之一。JavaScript涵盖的内容比较多,需要一个较为系统的学习过程才能逐渐掌握,下面就给大家讲解一下JavaScript异步编程的知识。 什么是异步? 所谓"异步",简单说就是一个任务分成两段,先执行第一段,然后转而执行其他任务,等做好了准备,再回过头执行第二段。这种不连续的执行就叫做异步,程序异步运行,可以提高程序运行的效率,相应地,连续的执行就叫做同步。 JavaScript异步编程方法 1、回调函数。回调函数在Javascript中非常常见,一般是需要在一个耗时操作之后执行某个操作时可以使用回调函数。在回调函数嵌套层数不深的情况下,代码还算容易理解和维护,一旦嵌套层数加深,就会出现“回调金字塔”的问题,还有一个问题就是我们在回调函数之外无法捕获到回调函数中的异常。 2、事件监听(事件发布/订阅)。事件监听是一种非常常见的异步编程模式,它是一种典型的逻辑分离方式,很适合一些需要高度解耦的场景。通常情况下,我们需要考虑哪些部分是不变的,哪些是容易变化的,把不变的部分封装在组件内部,供外部调用,需要自定义的部分暴露在外部处理。从某种意义上说,事件的设计就是组件的接口设计。 3、Promise对象。ES

ES6 中的 Promise

旧时模样 提交于 2019-12-23 13:43:24
一、由异步嵌套引出ES6 中的 Promise // 需求:你要封装一个方法,我给你一个要读取文件的路径,你这个方法能帮我读取文件,并把内容返回给我 const fs = require('fs') const path = require('path') /** * 根据路径读取文件内容 * fs.readFile读取文件是异步执行的 * @param fpath 读取路径 * @param errCb 成功回调函数 * @param succCb 失败回调函数 */ function getFileByPath(fpath, succCb, errCb) { fs.readFile(fpath, 'utf-8', (err, dataStr) => { if (err) return errCb(err) succCb(dataStr) }) } // getFileByPath(path.join(__dirname, './files/11.txt'), function (data) { // console.log(data + '娃哈哈,成功了!!!') // }, function (err) { // console.log('失败的结果,我们使用失败的回调处理了一下:' + err.message) // }) // 需求: 先读取文件1,再读取文件2

PHP中 array_walk array_map array_filter区别

大憨熊 提交于 2019-12-23 10:27:03
array_walk: array_walk — 使用用户自定义函数对数组中的每个元素做回调处理 1. 用户自定义的函数处理每一个元素 2. 直接修改原数组,不会创建新的数组 3. 可以传递额外的参数 更多信息参考官方文档:http://php.net/manual/zh/function.array-walk.php array_map array_map — 为数组的每个元素应用回调函数 1. 回调函数,应用到每个数组里的每个元素 2. 可以处理多个数组,合并处理 3. 返回新建的数组 4. 传入 NULL 作为回调函数的名称,将创建多维数组 5. 传入两个及以上的数组时,它们元素数量将会相同。因为回调函数会并行地处理相互对应的元素。 如果几个数组的元素数量不一致:空元素会扩展短那个数组,直到长度和最长的数组一样。 更多信息参考官方文档:http://php.net/manual/zh/function.array-map.php array_filter * array_filter — 用回调函数过滤数组中的单元* 1. 依次将 array 数组中的每个值传递到 callback 函数。如果 callback 函数返回 true,则 array 数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。 2. 如果没有提供 callback 函数, 将删除 array

kotlin 回调函数、let、also、run 、with、apply 使用总结

扶醉桌前 提交于 2019-12-23 09:01:39
kotlin lambda 简化 ————————kotlin 回调函数、let、also、run 、with、apply 使用总结 Lambda 表达式( lambda expression )是一个匿名函数。编程中提到的 lambda 表达式,通常是在 需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。 回调函数 内联函数 let 内联函数 also 内联函数 with 内联函数 run 内联函数 apply 用法总结 一、回调函数 回调函数的Java写法 mEditText . addTextChangedListener ( new TextWatcher ( ) { @Override public void afterTextChanged ( Editable editable ) { // TODO } } ) ; 回调函数的kotlin写法 mEditText ? . addTextChangedListener ( object : TextWatcher { override fun afterTextChanged ( editable : Editable ) { // TODO } } ) 在Kotlin中,对于 接口只有一个回调的方法,符合使用lambda mEditText . addTextChangedListener (

python爬虫之spider用法

不羁岁月 提交于 2019-12-23 03:50:44
Spider类定义了如何爬取某个网站, 包括爬取的动作以及如何从网页内容中提取结构化的数据, 总的来说spider就是定义爬取的动作以及分析某个网页. 工作流程分析 :   1. 以初始的URLRequest, 并设置回调函数, 当该requeset下载完毕并返回时, 将生成response, 并作为参数传递给回调函数. spider中初始的request是通过start_requests()来获取的. start_requests()获取start_urls中的URL, 并以parse以回调函数生成Request   2. 在回调函数内分析返回的网页内容, 可以返回item对象, 或者Dict,或者Request, 以及是一个包含三者的可迭代的容器, 返回的Request对象之后会经过Scrapy处理, 下载相应的内容, 并调用设置的callback函数.   3. 在回调函数, 可以通过lxml, bs4, xpath, css等方法获取我们想要的内容生成item   4. 最后将item传送给pipeline处理 源码分析 :   在spiders下写爬虫的时候, 并没有写start_request来处理start_urls处理start_urls中的url, 这是因为在继承的scrapy.Spider中已经写过了   在上述源码中可以看出在父类里实现了start

libevent学习七(bufferevent)

眉间皱痕 提交于 2019-12-22 14:34:36
1. 每个bufferevent 都拥有类型为struct evbuffer的input buffer和out buffer,分别供数据读取和数据写入使用。 2.读取和写入数据是通过编写和设置对应的回调函数进行,而调用回调函数的时机则根据水位是否满足来的,水位又是可以设置的。默认情况下读的低水位是0,就是说libevent从底层读到大于0的数据到input buffer中,读回调函数就会调用,读回调函数读取input buffer的数据;同样默认的写水位也为0,就是说一旦output buffer中没有数据,就会调用写回调函数写入数据到output buffer,ouput buffer会自动由libevent传出到对端。 3.bufferevent 除了有读写事件还有其他事件 BEV_EVENT_READING:读过程中发生的事件 BEV_EVENT_WRITING :写过程中发生的事件 BEV_EVENT_ERROR:操作过程中发生的事件 BEV_EVENT_TIMEOUT:超时事件 BEV_EVENT_EOF:到达文件末尾 BEV_EVENT_CONNECTED:连接成功事件 4.bufferevent的选项 BEV_OPT_CLOSE_ON_FREE:释放bufferevent的时候释放掉底层的socket和底层的bufferevent BEV_OPT_THREADSAFE