当前位置:首页 » 网页前端 » 前端两个定时器的区别
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

前端两个定时器的区别

发布时间: 2022-07-13 04:21:27

‘壹’ 定时器有几种类型,各有什么特点

定时器有五种,其特点分别为:

1、 接通延时型定时器:接通延时型定时器是各种PLC中最常见最基本的定时器,这种定时器在 SIEMENS的PLC中,称为SD型定时器。

2、 断开延时型定时器:这种定时器是当输入条件00000为ON时无延时作用,只有在输入条件00000为OFF时产生延时作用。在SIEMENS的PLC中,称为SF型定时器。

3、保持型接通延时定时器:这种定时器是当输入条件00000为ON后,即产生锁存功能,即使输入条件00000又变为OFF,仍视输入条件为ON,当定时器的当前值等于设定值时,定时器动作,这种定时器在SIEMENS的PLC中,称为SS型定时器。

4、脉冲型定时器:这种定时器是当输入条件00000为ON后,定时器即时动作,但经过定时器所设定的时间后,即使输入条件00000仍为ON,定时器却变为OFF状态。

即这种定时器ON状态的维持时间是由设定值决定的。如果00000为ON的时续时间小于定时器的设定值,定时器的ON状态维持时间为输入条件00000为ON的持续时间。这种定时器在SIEMENS的PLC中,称为SP型定时器。

5、扩张型脉冲定时器:这种定时器与脉冲型定时器的区别是,只要输入条件00000出现了ON状态,不管其持续时间多长,均可使定时器为ON的维持的时间与定时器的设定值一致。这种定时器在SIEMENS的PLC中,称为SE型定时器。

(1)前端两个定时器的区别扩展阅读:

定时器的应用实例:

1、电热水器

许多家庭为了方便使用热水,让热水器24小时通电,其中很大部分电能消耗在了白天和夜间的反复加热上面。1000瓦功率的用电器,1小时消耗的电量是1 度,那么1500瓦通电热水器每三小时热水器自动加热30分钟,每天加热时间是240分钟,每天耗电6度。

使用自动开关插座后,可以设定在早上起床前半个小时开始加热,起床后就能用上热水;设定下班回家半个小时前开始加热,回家就能洗个热水澡。

如果是三口之家,晚上热水器还需要工作一个半小时加热,一天下来热水器工作时间缩短为两个小时,节约3度电,同时还延长了热水器的使用寿命,集节能、方便、安全、实用于一体。

2、饮水机

很多家庭或者办公场所饮水机24小时通电,300瓦的饮水机每20分钟加热5分钟,每天加热24*60/20*5= 360分钟=6小时,每天耗电 0.3*6=1.8度,一年耗电648度。使用定时器后,设定在起床前和下班回家前15分钟通电,到家就能喝上,用上热水。

晚上在家的6点到12点可以让机器通电,每天加热100分钟,每天耗电0.3*1.7=0.51度,每月耗电15.3度,一年耗电183.6度。同时,饮用水加热6小时以上会产生亚硝酸盐,可致癌、产生血管等疾病,定时开关分时加热是最好的解决方案。

参考资料来源:网络-时间定时器

参考资料来源:网络-定时器(用于定时的机械或电子装置)

‘贰’ 关于java定时器 区别

(1)schele方法:“fixed-delay”;如果第一次执行时间被delay了,随后的执行时间按 照 上一次 实际执行完成的时间点 进行计算
(2)scheleAtFixedRate方法:“fixed-rate”;如果第一次执行时间被delay了,随后的执行时间按照 上一次开始的 时间点 进行计算,并且为了”catch up”会多次执行任务,TimerTask中的执行体需要考虑同步

通俗的说就是第一种方法,你设置参数是10s中,它肯定会大于10s,因为执行方法是需要时间的。第二种方法,意图保持固定的频率,10s中后会执行第二次,再过十秒一定执行第三次。哪怕方法里面是耗时的,也会在10s后准时执行第二次。

‘叁’ Timer和spring的Quartz两种定时器的区别

第一个例子。timer定时器。(这个比较简单,timer是Java.util包下一个类)
为了更好的了解,我写了两个定时器类,很被集成TimerTask。
public class MyTask extends TimerTask{
int count = 0;
public void run() {
System.out.println("定时器TimerTask启动"+count);
count++;
}

}
++++++++++++++++++++++++++++++++++++++++++++

public class MyTaskB extends TimerTask{
int count = 0;
public void run() {
System.out.println("定时器MyTaskB启动"+count);
count++;
}
}
+++++++++++++++++++++++++++++++++++++++++++

在main方法中测试
Timer timer=new Timer();
/**
* 定时器任务制定,执行
* @param tag: 0.在指定的时间里,执行指定的任务;
* 1.在指定的时间里,按照指定的延迟,重复执行指定任务;
* 2.从指定的延迟后,执行指定任务;
* 3.从指定的延迟后,按照指定的延迟,重复执行指定的任务。
*
* @param mydate:指定的执行时间。只有在tag等于0、1才需要指定。
* @param delay: 延迟执行时间,毫秒数。只有在tag等于1、3才需要指定。
* @param period:间隔执行时间,毫秒数。只有在tag等于4才需要指定。
*/

//定时器,执行任务测试
public static void main(String[] args) {
new TestA().timer.schele(new MyTask(), 1000);
new TestA().timer.schele(new MyTaskB(), 4000);
}

注:timer还可以在web中应用。直接把MyTask()和MyTaskB()里面的方法作修改即可,也可以在任务完成后关掉timer定时。
总结:其实timer实现定时任务是很简单的,但是在想法开发是很少用到timer,而是用spring的Quartz。我也在网上找到了一些资料,现在总结一下。
1. Java定时器没有持久化机制。
2. Java定时器的日程管理不够灵活(只能设置开始时间、重复的间隔,设置特定的日期、时间等)//这点感同身受
3. Java定时器没有使用线程池(每个Java定时器使用一个线程)//想必在用timer是遇到了吧。
4. Java定时器没有切实的管理方案,你不得不自己完成存储、组织、恢复任务的措施

一下例子是我在myeclipse中创建了一个小项目,仅供参考。

第一步建立web项目(省略)

第二步导入必要包:如下
用到了一下包:
(这九个包我就不多说了,想必大家都知道他的用处。)
第三步:配置相关文件。web.xml、quartz.properties、quartz_job.xml这三个文件。这里我就没用spring的applicationContext.xml文件来管理了。其实原理都是一样,都是在web启动时监听并启动定时器。配置spring的quartz定时器有两种方法,一种是你用quartz.properties、quartz_job.xml,另外一种是用spring的applicationContext.xml。其实在开发的时候我还是比较喜欢前面一种,因为简单、方便,而用spring的applicationContext.xml里面本来就有各种配置,各种注入,是文件不够清晰(个人见解。呵呵)
(项目中文件的位置,直接放在src目录下)
第四步:web.xml文件配置(监听和启动定时器)

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<listener>
<listener-class>
org.quartz.ee.servlet.QuartzInitializerListener
</listener-class>
</listener>

<!-- timer -->
<context-param>
<param-name>config-file</param-name>
<param-value>/quartz.properties</param-value>
</context-param>

<context-param>
<param-name>shutdown-on-unload</param-name>
<param-value>true</param-value>
</context-param>

<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

第五步:配置quartz.properties文件

org.quartz.scheler.instanceName = TestScheler
org.quartz.scheler.instanceId = one

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 2
org.quartz.threadPool.threadPriority = 4

org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
org.quartz.plugin.jobInitializer.fileName = quartz_job.xml

注解:主要主用是启动quartz_job.xml。其余的都是一些配置性能的属性,可以在网上查看。
第六步:配置quartz_job.xml(里面主要配置定时器的一下属性)

<?xml version="1.0" encoding="GBK"?>
<quartz>
<!-- 每1分钟执行一次 -->
<job>
<job-detail>
<name>getDate</name><!-- 表示目标定时器的方法(也就是这个方法要定时的作用)-->
<group>job</group>
<job-class>com.timer.util.TimerTask</job-class><!-- 表示上面的getDate()方法路径(即所在的包)-->
</job-detail>
<trigger>
<cron>
<name>t1</name>
<group>job</group>
<job-name>getDate</job-name>
<job-group>job</job-group>
<cron-expression>0 0/1 * * * ?</cron-expression><!-- 设置定时器的触发时间即间隔时间(参数形式可以在网上查到自己想要的形式)-->
</cron>
</trigger>
</job>

</quartz>

第七步:写用两个类来测试定时器是否好用。

public class TimerTask implements Job {

private static Logger logger = Logger.getLogger(TimerTask.class);

public void execute(JobExecutionContext arg0) throws JobExecutionException {
try {
TimerOperation.getDate();
} catch (Exception ex) {
logger.info(ex.getMessage());
}
}

}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
public class TimerOperation {
private static Logger logger = Logger.getLogger(TimerOperation.class);
public static void getDate()
{
String strCurrentDateTime = "";
Date currentDateTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
strCurrentDateTime = formatter.format(currentDateTime);
logger.info("定时器启动"+strCurrentDateTime);
}
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
写这两个类就会看出,定时器不能直接调用自己写了定时方法,要先写一个类实现job的接口,然后在实现接口的execute()方法里面调用自己事先写好的定时任务。
好了一个定时器就写好了。运行项目,等待一分钟控制台就会出现

‘肆’ 单片机中定时器一二有区别吗

看哪种单片机的吧,有些单片机,在NORMAL 模式下,两个定时器,确实是一样的,都可以用,但在其他模式下,好像GREEN MODE ,那可能只有一个定时器可以工作。
具体的,你要看你用的单片机的DATASHEET 的了,
看定时器的说明就OK

‘伍’ 前端里面什么是定时器

定时器是用来在指定时间执行指定任务的组件:

  1. setTimeout(callback, ms) 函数:

    例如:var timer = setTimeout(function(){ alert("hello")}, 1000); 表示在1000毫秒后执行alert("hello"),

可以使用clearTimeout(timer)来取消定时器。

2. setInterval(callback, ms)函数:

例如:var timer = setInterval(function(){ alert("hello")}, 1000); 表示每隔1000毫秒执行一次alert("hello"), 第一次是在1000毫秒后执行,

可随时使用clearInterval(timer) 来取消定时器


‘陆’ AS3 setTimeOut,setInterval,Timer 的区别和用法

timer是定时器控件。
定时器控件响应时间的变化,它们独立于用户,编程后可以用来每隔一定的时间间隔执行一次操作。这个控件的一个一般用处是检查系统时钟,判断是否该执行某项任务。对于其它后台处理,定时器控件也非常有用。
定时器控件有一个Interval属性,指定定时器事件之间的毫秒数。除非禁止这个属性,否则定时器会在大致相等的时间内不断处理事件中的操作。
在为计时器控件编程时应考虑对Interval属性的几条限制:
如果应用程序或其它应用程序正在进行对系统要求很高的操作——例如大循环、高强度计算或者正在访问驱动器、网络等——则应用程序定时器时间的间隔可能比Interval属性指定的间隔长。
间隔的取值可以在0-64767之间,最长的间隔也不比一分钟长多少。
间隔并不一定十分准确。要保证间隔准确,应只在需要时才让定时器检查系统时钟,而不在内部追踪累计的时间。
系统每秒生成十八个时钟信号——即使用毫秒衡量Interval属性,间隔实际的精确度不会超过十八分之一秒。
每个定时器控件必须与窗体关联,也就是说定时器控件必须在窗体上创建。如果不需要窗体完成其它操作的话,就不必使窗体可见。
定时器控件有两个关键属性:Enabled和Interval属性。定时器的Enabled属性设置为False时会暂停定时器操作。定时器事件是周期性的,Interval属性主要是决定【多少次】而不是【多久】。间隔的长度取决于所需的精确度。因为存在某些内部的错误可能性,所以应该把间隔设置为精确度的一半。
定时器时间越频繁,响应事件所使用的处理器事件就越多。这将降低系统性能。所以,除非在特别有必要的情况下,才应把时间间隔设置得比较小,否则不要设置过小的间隔。
希望我能帮助你解疑释惑。

‘柒’ js两个页面的定时器互相影响

问题:当一个页面同时有两个setInterval函数调用的冲突如何解决?

解决方法:

定义两个变量 并把 setInterval 赋值给变量

var a = setInterval(function(){ ------ code ------},1000)

var b = setInterval(function(){ ------ code ------},1000)

清除

clearInterval(a)

clearInterval(b)

举例:

注:

setInterval()方法会不停地调用函数,直到用clearInterval()终止定时或窗口被关闭。

window.clearInterval()

功能:取消由setInterval()方法设置的定时器。

‘捌’ 定时器setTimeout和setInterval的区别

因为setTimeout(表达式,延时时间)在执行时,是在载入后延迟指定时间后,去执行一次表达式,记住,次数是一次
而setInterval(表达式,交互时间)则不一样,它从载入后,每隔指定的时间就执行一次表达式
所以,完全是不一样的

很多人习惯于将setTimeout包含于被执行函数中,然后在函数外再次使用setTimeout来达到定时执行的目的
这样,函数外的setTimeout在执行函数时再次触发setTimeout从而形成周而复始的定时效果

使用的时候各有各的优势,使用setInterval,需要手动的停止tick触发。而使用方法中嵌套setTimeout,可以根据方法内部本身的逻辑不再调用setTimeout就等于停止了触发。

其实两个东西完全可以相互模拟,具体使用那个,看当时的需要而定了。就像for可以模拟所有的循环包括分支,而还提供了do、while一样。
//每60秒执行myFunction()一次
setInterval("myFunction()",60000);
funcition myFunction(){
alert(’myFunction()’);
}
//每60秒执行一次myFunction()
setTimeout("myFunction()",60000); //需要函数触发
//如 放置在 body 的 onload事件里面