當前位置:首頁 » 網頁前端 » 前端兩個定時器的區別
擴展閱讀
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事件裡面