『壹』 定時器有幾種類型,各有什麼特點
定時器有五種,其特點分別為:
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
『伍』 前端裡面什麼是定時器
定時器是用來在指定時間執行指定任務的組件:
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事件裡面