日韩无码一区,老翁h狠狠躁死你h乔舒,人妻精品久久无码区洗澡,被伦流澡到高潮苏软软

我的訂單購物車(0)會員中心 聯系客服 幫助中心供應商合作 嘉立創產業服務群
領券中心備貨找料立推專區爆款推薦PLUS會員BOM配單品牌庫PCB/SMT工業品面板定制

軟件定時器和多線程的不同之處

2019-06-17 19:01:41閱讀量:534

1 軟件定時器

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,速度:軟件定時器的精度比較低,這是由Windows不實時的特性所決定的,在XP下,如果關閉所有能關閉的進程,MFC的軟件定時器可以達到接近15ms的精度,而在Win2000下,其能達到接近10ms的精度。但是實際情況是,有些進程是不可以關閉的,比如說數據庫服務器,所以MFC的軟件定時器能夠達到的精度一般情況下在40ms左右,BCB和delphi就更差一點,大概在55ms左右。QueryPerformanceCounter倒是可以大幅提高精度,但是穩定性欠佳。


缺點2,效率:軟件定時器其本質實際上是在消息循環中處理WM_TIMER消息,而WM_TIMER消息在消息隊列中是一個低級別的消息,所以定時器并不能完全保證處理時間間隔的準確性。另外,TImer占用的是主線程的資源,看似并行實際上是串行,所以窗體的消息隊列一旦堵塞,就會造成系統假死或者運行緩慢,這對于UI來說幾乎是無法忍受的。


2 多線程區別

定時器:程序中開啟兩個定時器,給人的假象是好像是同時進行。。。。其實不然,就是赤裸裸的串行,

除去定時器的串行運行,以及效率不說,他其實和線程差不多少。

如下看兩個定時器的運行:

QTImer *time=new QTimer;

time-》start(2000);

connect(time,SIGNAL(timeout()),this,SLOT(slot_time1()));

QTimer *time1=new QTimer;

time1-》start(3000);

connect(time1,SIGNAL(timeout()),this,SLOT(slot_time2()));

void MainWindow::slot_time1()

{

qDebug()《《“------------------time1-------------------”;

for(int i=0;i《30000;i++)

{

for(int n=0;n《65000;n++)

{

;

}

}

qDebug()《《“-------------------------------------------”;

}

void MainWindow::slot_time2()

{

qDebug()《《“***********************time2****************”;

for(int i=0;i《60000;i++)

{

for(int n=0;n《65000;n++)

{

;

}

}

qDebug()《《“********************************************”;

}

定時器與線程的區別

在定時器1觸發的時候,里面加入延遲,要是線程的話,馬上就會運行第二個線程,但是定時器不是,直到第一個運行完畢,才會運行別的。

再看線程:

mythread *th=new mythread;

th-》start();

mythread1 *th1=new mythread1;

th1-》start();

void mythread::run()

{

qDebug()《《“------------------time1-------------------”;

this-》sleep(2);

qDebug()《《“-------------------------------------------”;

}

void mythread1::run()

{

qDebug()《《“********************time2*************************”;

this-》sleep(4);

qDebug()《《“**********************************************”;

}

程序開始線運行線程2,進行4s延遲,在這期間,并沒有阻塞,而是去運行線程1 2s過后,再回到線程2。



【內容聲明】本文刊載的所有內容,包括文字、圖片、音頻、視頻、軟件、程序、以及網頁版式設計等均在網上搜集。本文提供的內容或服務僅用于個人學習、研究或欣賞,以及其他非商業性或非盈利性用途,本網站不承擔任何法律責任。如涉及版權問題,請及時通知本網站刪除。


主站蜘蛛池模板: 卫辉市| 瑞昌市| 兴海县| 册亨县| 尼木县| 奈曼旗| 新沂市| 额尔古纳市| 哈尔滨市| 建德市| 灵川县| 元氏县| 嘉义市| 格尔木市| 丰宁| 东港市| 英超| 青铜峡市| 两当县| 马山县| 沾化县| 木兰县| 游戏| 砚山县| 华容县| 太和县| 西藏| 剑河县| 南昌市| 东光县| 九寨沟县| 文登市| 行唐县| 平度市| 收藏| 永安市| 伊通| 海安县| 吉隆县| 全椒县| 会宁县|