定时器

HTML5新特性-- -定时器

荒凉一梦 提交于 2020-03-04 00:42:53
一、定时器:一次性定时器/周期性定时器 #requestAnimationFrame 智能定时器 #此定时器主要使用范围:动画和游戏中 特点: setTimeout(fn,500); setInterval(fn,500); 周期性调用fn函数间隔500ms 二台电脑: 新 12ms 旧 600ms 解决方案:requestAnimationFrame 智能计算当前浏览器效率 11ms,计算600ms 按照不同浏览器设置间隔时间 #实现功能平滑 #使用方法 requestAnimationFrame == setTimeout 标准语法 requestAnimationFrame(fn) 如何周期调用定时器完成游戏 function f1(){ requestAnimationFrame(f1); .... .... } f1(); 二、HTML5新特性-svg--echarts(重点) canvas svg 绘图类型 2D位图 2D矢量图 如何绘制 使用js代码 标签 事件绑定 只能绑定在画布 每个图形都可绑定事件 应用场景 网页特效;游戏 地图 svg 图形创建流程 (1)创建画布标签 <svg id="s3" width="500" height="400"> ... </svg> (2)添加圆环标签 <circle cx="" cy="" r="" fill=""

vue项目使用定时器每隔几秒请求一次接口

给你一囗甜甜゛ 提交于 2020-03-03 21:21:22
vue.js项目,每隔5秒请求一次接口,接口有返回则停止请求,没有返回继续请求。 先看两种定时器 // 每隔设定时间调用一次函数 setInterval ( function ( ) { } , milliseconds ) //设定时间后只执行函数一次 setTimeout ( function ( ) { } , milliseconds ) 注意:单纯的使用setInterval会导致页面卡死! 由于setInterval不会清除定时器队列,每重复执行1次都会导致定时器叠加,最终卡死网页。 但是setTimeout是自带清除定时器的,因此正确解决方法如下: window . setInterval ( ( ) => { setTimeout ( fun , 0 ) } , 30000 ) setInterval必须放在外层,内层配合setTimeout,便可以无限次调用接口 回到要解决的问题,如何在得到数据后停止定时器? // 如methods里定义的点击方法 methods : { click ( ) { let timer = setInterval ( ( ) => { this . fun ( timer ) } , 5000 ) } , fun ( timer ) { setTimeout ( ( ) => { // 这里ajax 请求的代码片段和判断是否停止定时器

前端基础之BOM和DOM

我只是一个虾纸丫 提交于 2020-03-03 15:13:15
前戏 JavaScript分为 ECMAScript,DOM,BOM。   BOM(Browser Object Model)是指浏览器对象模型,它使 JavaScript 有能力与浏览器进行“对话”。   DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。   Window对象是客户端JavaScript最高层对象之一,由于window对象是其它大部分对象的共同祖先,在调用window对象的方法和属性时,可以省略window对象的引用。例如:window.document.write()可以简写成:document.write()。 BOM window对象 看上面的例子你会发现,name直接封装到了window对象上,了解一下就可以了。   所有浏览器都支持 window 对象。它表示浏览器窗口。   *如果文档包含框架(frame 或 iframe 标签),浏览器会为 HTML 文档创建一个 window 对象,并为每个框架创建一个额外的 window 对象(了解)。   *没有应用于 window 对象的公开标准,不过所有浏览器都支持该对象(了解)。   所有 JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员。   全局变量是 window 对象的属性。全局函数是 window

STM32单片机 关于超声波模块的学习(1)

不问归期 提交于 2020-03-03 14:16:32
分享一篇我刚刚弄完的一个超声波模块的学习 超声波模块的介绍: 1.单片机的一个IO口发送高电平的信号给Trig,信号时间要大于10us 2.然后模块的内部会发送方波 3.然后Echo会给单片机的IO口发送高电平,这个高电平持续的时间是超声波模块从碰到物体再返回的时间 模块的连接问题 我使用的是CH340G模块与电脑进行通信 编程思路: 1、先需要去配置定时器(基本定时器也可以,我用的是TIM2),还有串口的配置,还有延时函数的配置(推荐大家使用systick定时器)因为比较精准 2、基本的配置好了下面就要去写程序了 先随便定义两个IO口,连接Trig的IO口配置要推挽输出,连接Echo的IO口要浮空输入。 3、我看好多大神写的程序都是给Trig一个超过10us的高电平的时候进行了位操作和51很像,是定义在了sys.h这个头文件里。其实这个位操作在keil5中我没有看到有sys.h这个头文件,其实没有咱们也可以用STM32中的库函数去代替 4、给Trig发送高电平可以直接用GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);函数 5、检测Echo传给IO口的高电平时使用 uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);函数

RunLoop相关知识点

生来就可爱ヽ(ⅴ<●) 提交于 2020-03-02 14:25:31
NSRunLoop类声明的编程接口对象管理输入源。NSRunLoop对象处理鼠标和键盘等输入来源来自窗口系统的事件,NSPort对象,NSConnection对象。还一个NSRunLoop对象流程NSTimer事件 - (void)addTimer:(NSTimer *)timer forMode:(NSString *)mode; + (NSRunLoop *)currentRunLoop; + (NSRunLoop *)mainRunLoop NS_AVAILABLE(10_5, 2_0); 消息处理模式,对消息处理过程进行了更好的抽象和封装 1.输入事件来源:输入源(input source)和定时源(timer source).使用程序的某一特定的处理例程来处理到达的事件。 当你创建输入源,你需要将其分配给runloop中的一个或多个模式。模式只会在特定事件影响监听的源。大多数情况下,runloop运行在默认模式下,但是你也可以使其运行在自定义模式下。若某一源在当前模式下不被监听,那么任何其生成的消息只在runloop运行在其关联的模式下才会被传递。 传递异步事件,通常消息来自于其他线程或程序。输入源传递异步消息给相应的处理例程,并调用runUntilDate:方法来退出(在线程里面相关的NSRunLoop对象调用) 1.1 基于端口的输入源由内核自动发送

跨线程间的定时器机制----QTimer和QThread

做~自己de王妃 提交于 2020-03-02 07:30:20
跨线程使用定时器机制在博客 http://www.cnblogs.com/lingdhox/p/4218051.html 中做了详细的介绍,给出了两种常用的实现方式的具体实现,但并没有给出为什么定时器的溢出信号与槽方法的关联中使用Qt::DirectConnection方式。 如果信号与槽的连接方式使用默认方式( Qt::AutoConnection ),会发生什么? 定时器当slot的object是其他线程(不妨称为Thread1)时,会自动post事件到线程Thread1的事件循环系统。一方面,如果slot处理函数不是线程安全函数,定时器溢出信号到达slot处理函数时,slot处理函数有可能正在响应对象自身的调用,出现多个线程同时访问slot处理函数的情形,可能导致错误甚至系统崩溃。另一方面,即使slot处理函数是线程安全的,事件循环系统可能会导致定时器的响应事件出现延迟,对时间精度要求较高的环境,可能会导致错误。 来源: CSDN 作者: beibeix2015 链接: https://blog.csdn.net/beibeix2015/article/details/78738694

031-QObject-定时器-案例

喜你入骨 提交于 2020-03-02 00:44:51
一、案例一 (1)创建一个窗口,并设置一个子控件QLabel (2)要求:展示10s倒计时,一旦倒计时结束,就停止计时。 (3)涉及知识点:标签创建和设置;自定义标签类的封装;定时器的使用。 (4)掌握级别:了解定时器的基本操作。 from PyQt5.Qt import * import sys class MyLabel(QLabel): def __init__(self,*args,**kwargs): #封装一个控件 super().__init__(*args,**kwargs) self.setText("10") self.move(200, 200) self.setStyleSheet("font-size:22px;") def setSec(self,sec): self.setText(str(sec)) def startMyTimer(self,ms): self.timer_id = self.startTimer(ms) def timerEvent(self, *args, **kwargs): #获取当前标签的内容 current_sec=int(self.text()) current_sec-=1 self.setText(str(current_sec)) if current_sec==0: print("stop!") self

Linux内核定时器

佐手、 提交于 2020-03-01 11:51:55
Linux内核定时器 一、内核定时器介绍   内核定时器是内核用来控制在未某个时间点(基于jiffies(节拍总数))调度执行某个函数的一种机制,相关函数位于<linux/timer.h> 和 kernel/timer.c 文件中。    当内核定时器定时时间到达时,会进入用户指定的函数,相当于软中断。内核定时器注册开启后,运行一次就不会再运行(相当于自动注销),我们可以重新设置定时器的超时时间,让定时器重复运行。   每当时钟中断发生时,全局变量jiffies(一个32位的unsigned long 变量)就加1,因此jiffies记录了linux系统启动后时钟中断发生的次数,驱动程序常利用jiffies来计算不同事件间的时间间隔。内核每秒钟将jiffies变量增加HZ次。因此,对于HZ值为100的系统,jiffy+1等于隔了10ms,而对于HZ为1000 的系统, jiffy+1仅为1ms。   注意: jiffies 变量不能被修改,修改会出现错误。 二、内核定时器相关API 1、内核定时器结构体 struct timer_list { /* * All fields that change during normal runtime grouped to the same cacheline */ struct hlist_node entry ; unsigned

定时器与多线程 SetTimer and Multi-Thread 每个线程独立使用一个定时器

旧城冷巷雨未停 提交于 2020-03-01 11:12:46
定时器与多线程 SetTimer and Multi-Thread 每个线程独立使用一个定时器 生产者——消费者 模拟程序,需求如下: 将生产者和消费者模拟算法封装在一个动态链接库中,主程序调用相关函数。生产者放入产品和消费者取走产品的速度可调节。 分别用循环队列和栈实现。 一般模拟这个算法都是生产这,消费者各开一个线程,同步访问一个共享缓冲区。但是需求要求能调节速度,我的思路是在 每个线程里单独创建一个定时器,但是Windows下定时器特性是: 每隔定时时间,Windows系统放入一个 WM_TIMER 消息到应用程序的消息队列中。 所以我的解决方案如下: /* 更改定时器的消息 */ #define WM_SETTIMER WM_USER + 100 /* 生产者线程函数 */ DWORD WINAPI ProducerFunc(LPVOID lpParameter) { MSG msg; UINT producerTimerId; /* Create a message queue for this thread */ PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE); producerTimerId = SetTimer(NULL, 0, g_uProducerTimer, NULL); while(GetMessage(&msg,

内核定时任务timer_list

孤人 提交于 2020-02-29 19:35:54
使用定时器任务,可以让内核在将来的一个指定时刻执行一段指定的代码。内核定时器相关的接口在linux/timer.h文件中。 本文将会先介绍定时任务的使用,然后在此基础上了解其内部的实现逻辑。 一、定时任务结构体表示: struct timer_list { struct list_head entry; //用于链接到内核定时器链表中 unsigned long expires; //定时任务过期时间 void (*function)(unsigned long); //定时任务的工作函数 unsigned long data; //定时任务工作函数参数 struct tvec_base *base; //定时任务关联的内核定时器 #ifdef CONFIG_TIMER_STATS void *start_site; char start_comm[16]; int start_pid; #endif #ifdef CONFIG_LOCKDEP struct lockdep_map lockdep_map; #endif }; 二、定时任务相关的接口: 1. 初始化定时任务 #define TIMER_INITIALIZER(_function, _expires, _data) { \ .entry = { .prev = TIMER_ENTRY_STATIC }, \