回调函数

jQuery高级

*爱你&永不变心* 提交于 2020-01-08 17:55:39
JQuery高级  遍历:     1js的遍历方式       for(初始化值;循环结束条件;步长)     2jq的遍历方式       1jq对象.each(callback)       juqery对象.eahce(funcation(index,element){       index,代表索引       element代表集合中的每个元素对象       this.也代表每一个元素对象 })         2回调函数的返回值         true:如果当前funcation的返回值为true,则继续循环           false:如果当前datction的返回值为false,则结束循环     2$.each(object,[callback])     3. for .. of :jquery3.0版本之后提供的方式       for(元素对象 of 容器对象) 事件绑定     1jquery标准的绑定方式       jq对象.事件方法(回调函数);       注***如果绑定事件,确不传递回调函数,那么会触发浏览器默认行为。例如submit会触发表单的提交事件     2on绑定事件/off解除绑定       jq对象.on(事件名称,回调函数)       jq对象。off(事件名称)       如果off方法不传递任何参数

FreeRTOS - 定时器使用注意

笑着哭i 提交于 2020-01-08 10:18:44
1、只有进入定时器守护任务,从定时器命令队列取出命令,队列空间才会空出一个可用空间;所有定时器公用一个定时器队列 2、如果使用软件定时器,在调度器开始前,会自动创建一个定时器守护任务,configTIMER_TASK_STACK_DEPTH和configTIMER_TASK_STACK_DEPTH用于设置这个守护任务的栈大小和任务优先级,各个定时器的回调函数是定时器守护任务调用的函数;哪个定时器定时时间到就执行哪个定时器回调函数,如果某个回调函数调用可能导致阻塞的函数,就会影响其他回调函数的调用周期,所以 不建议在回调函数调用可能导致阻塞的函数,并且回调函数执行周期尽可能的短 3、定时器守护任务进入准备态的条件:定时器命令队列非空,或者定时器定时时间到 4、因为发送给定时器命令队列的命令包含时间戳(time stamp,用来记录调用命令和命令被定时器守护任务处理的时间段),所以一调用xTimerStart(...)函数,定时器就开始计时,而不是等到进入定时器守护任务执行“开始命令”才计时,其他命令效果一样,比如重启定时器、改变定时器周期。 5、void vApplicationTickHook( void )也可以作为定时器回调函数使用,周期是一个tick period。 来源: https://www.cnblogs.com/god-of-death/p/6882254.html

Erlang --- gen_server

前提是你 提交于 2020-01-08 06:20:14
行为模式 gen_server代表的就是“行为模式”的一种,行为模式的目的在于为特定类型的进程提供一套模板。 启动服务器 用来启动服务器的有 start/3 , start/4 , start_link/3 , start_link/4 这四个函数。 使用这些start函数之后,就会产生一个新的进程,也就是一个gen_server服务器。这些 start函数的正常情况下返回值是 {ok,Pid} , Pid 就是这个新进程的进程号。 带link与不带的区别在于是否跟父进程建立链接,换种说法是,新启动的进程死掉后,会不会通知启动他的进程(父进程)。 start函数可以四个参数 (ServerName, Module, Args, Options) : 第一个参数 ServerName 是服务名, 是可以省掉的。具有相同服务名的模块在一个节点中只能启动一次,重复启动会报错,为 {error, {already_started, Pid}} 。具有服务名的服务进程可以使用服务名来调用, 没有服务名的只能通过进程号pid来调用了。通常有名字的服务进程会使用模块名做为 服务名,即上面模板中定义的宏 -define(SERVER, ?MODULE) ,然后在需要使用服务名的 地方填入 ?SERVER . 第二个参数 Module 是模块名,一般而言API和回调函数是写在同一个文件里的,所以就用

Duilib学习笔记《01》— duilib整体框架认识

六月ゝ 毕业季﹏ 提交于 2020-01-08 03:06:50
从GoogleCode上下载的duilib工程中附带的一副总体设计图(如下所示),可以先整体了解一下,有个初步的认识,对后续进一步深入了解学习会很有帮助。 通过设计图有了一个初步认识后,接下来开始进一步深入学习了解,主要从以下几个方面进行了解学习: 库的组成;框架基本流程;元素创建机制;消息处理机制。 1. 库的基本组成 1.1 工具库 由于duilib没有对外部的任何库进行依赖,所以在其内部实现了很多用于支撑项目的基础类(如下图所示)。这些类分布在Util文件夹中: UI相关:CPoint / CSize / CDuiRect 简单容器:CStdPtrArray / CStdValArray / CStdString / CStdStringPtrMap 上面这些类看名字就基本能够理解其具体的含义了,当然除了基本的基础库,还有一些和窗口使用相关的工具的封装,如窗口工具:WindowImplBase,这个工具我们在这里不详述,后面使用中会经常用到。 1.2 控件库 控件库在duilib的实现中被分为了两块:Core和Control: Core中包含的是所有控件公用的部分,里面主要是一些基类和绘制的封装。 Control中包含的就是各个不同的控件的行为了。 这当中尤其要注意控件基类CControlUI和容器基类CContainerUI,这是duilib核心类(如下图所示

C#的StackExchange.Redis实现订阅分发模式

岁酱吖の 提交于 2020-01-07 16:24:12
使用C#的StackExchange.Redis实现订阅分发模式 wu大糊涂 关注 一、订阅分发模式介绍 Redis发布订阅—Pub/Sub模式或者说是观察者模式。我想大家即使没有使用过,也已经耳熟能详了。 先简单举例说明下应用场景,在场景中我们可以分析到其优势在哪。 比如你的线上应用应用,你想设置一个日志报警系统,当应用出现异常的时候,立马发送通知给你,可能是短信的形式,也可能是邮件的形式。当然如果只将报警通知给你一个人,实现起来很简单,在报警系统中将你的手机号和短信写死在程序中。但是如果你的项目庞大,每个模块有各自的负责人,并且负责人也经常会变更,那么咱们就不能总修改代码了吧? 或者说你的个人博客可以让读者订阅,读者这么多,咱们根本控制不过来呀。 现在发布订阅模式,就可以解决你的问题。在某一点发生改变的时候,其他客户端立即得到通知。也可以说订阅服务器得到应用发布消息,由服务器立即通知给你手中的客户端。这样的好处就是一种松耦合的模式,你不再需要修改发布端和订阅端的任何代码,你只要提供好发布和订阅的操作接口,今后调用就可以了。 二、Redis帮助类 1、连接redis数据库 public static ConnectionMultiplexer Manager private static ConnectionMultiplexer GetManager(string

php 数组汇集

你。 提交于 2020-01-07 12:46:48
统计: array_count_values 统计数组中所有的值出现的次数 array_product 计算数组中所有值的乘积 array_sum 计算数组中所有值的和 count 计算数组中的单元数目或对象中的属性个数 sizeof count() 的别名 搜索: array_key_exists 检查给定的键名或索引是否存在于数组中 array_search 在数组中搜索给定的值,如果成功则返回相应的键名 in_array 检查数组中是否存在某个值 排序: array_multisort 对多个数组或多维数组进行排序 arsort 对数组进行逆向排序并保持索引关系 asort 对数组进行排序并保持索引关系 krsort 对数组按照键名逆向排序 ksort 对数组按照键名排序 natcasesort 用“自然排序”算法对数组进行不区分大小写字母的排序 natsort 用“自然排序”算法对数组排序 rsort 对数组逆向排序 sort 对数组排序 uasort 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联 uksort 使用用户自定义的比较函数对数组中的键名进行排序 usort 使用用户自定义的比较函数对数组中的值进行排序 shuffle 将数组打乱 交集: array_intersect_assoc 带索引检查计算数组的交集 array_intersect_key

PHP数组功能汇集

China☆狼群 提交于 2020-01-07 12:46:35
统计: array_count_values 统计数组中所有的值出现的次数 array_product 计算数组中所有值的乘积 array_sum 计算数组中所有值的和 count 计算数组中的单元数目或对象中的属性个数 sizeof count() 的别名 搜索: array_key_exists 检查给定的键名或索引是否存在于数组中 array_search 在数组中搜索给定的值,如果成功则返回相应的键名 in_array 检查数组中是否存在某个值 排序: array_multisort 对多个数组或多维数组进行排序 arsort 对数组进行逆向排序并保持索引关系 asort 对数组进行排序并保持索引关系 krsort 对数组按照键名逆向排序 ksort 对数组按照键名排序 natcasesort 用“自然排序”算法对数组进行不区分大小写字母的排序 natsort 用“自然排序”算法对数组排序 rsort 对数组逆向排序 sort 对数组排序 uasort 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联 uksort 使用用户自定义的比较函数对数组中的键名进行排序 usort 使用用户自定义的比较函数对数组中的值进行排序 shuffle 将数组打乱 交集: array_intersect_assoc 带索引检查计算数组的交集 array_intersect_key

C++使用模板、函数指针、接口和lambda表达式这四种方法做回调函数的区别比较

a 夏天 提交于 2020-01-07 08:42:05
在C++中,两个类之间存在一种关系,某个类需要另外一个类去完成某一个功能,完成了之后需要告知该类结果,这种最普通最常见的需求,往往使用回调函数来解决。 如题,我总结下来有这么四种方式可以完成这项功能,下面来一一分析: 1、使用模板 // CppTest.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <stdlib.h> #include <math.h> template<typename T> class MathTemplate { int ops1,ops2; int result; public: void Add(int a,int b,T callback) { ops1 = abs(a); /* 实际上这个函数可能非常复杂,非常耗时,这样回调更突显作用*/ ops2 = abs(b); result = ops1+ops2; callback.showResult(result); } }; class Result { public: void showResult(int res) { printf("result = %d\n",res); } }; int _tmain(int argc, _TCHAR* argv[]) { Result reShow; MathTemplate<Result>

JavaScript之Promise对象

China☆狼群 提交于 2020-01-07 06:07:08
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了 Promise 对象。 Promise 对象是一个代理对象(代理一个值),被代理的值在 Promise 对象创建时可能是未知的。它允许你为异步操作的成功和失败分别绑定相应的处理方法(handlers)。 这让异步方法可以像同步方法那样返回值,但并不是立即返回最终执行结果,而是一个能代表未来出现的结果的 Promise 对象。 Promise 对象有以下两个特点: 对象的状态不受外界影响。Promise 对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功) 和 rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是Promise这个名字的由来,它的英语意思就是“承诺”,表示其他手段无法改变。 Promise 对象的状态改变,只有两种可能:从 pending 变为 fulfilled 和 从 pending 变为 rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果,这时就称为 resolved(已定型)。如果改变已经发生了

Vue--axios

天涯浪子 提交于 2020-01-06 22:38:05
前戏 如果你是使用vscode软件进行开发前端项目,进行ajax调试的时候,建议安装liveServer插件。这样我们打开一个文件的时候,会以服务的方式打开。 vue中常用的ajax库有两个,一个是vue-resource,这个是在vue1.x中广泛使用的插件。还有一个是axios,在vue2.x中,官方强烈推荐的第三方ajax请求库。 vue-resource 参考文档:https://github.com/pagekit/vue-resource/blob/develop/docs/http.md 在Vue的生命周期中,我们知道created()是最早可以获取到data数据的,所以我们一般都是在created()里写ajax请求 因为vue-resource是第三方库,所以我们需要先进行安装,才能使用 npm install vue-resource 创建一个json文件,假设我的叫name.json [ {"name":"张三","age":18}, {"name":"李四","age":66} ] 有json文件了,我们使用vue-resource请求数据 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device