久久久亚洲欧洲日产国码是av,久久99国内精品自在现线,久久久99一区二区三区,九一九色国产,久久精品成人免费国产

我的訂單購物車(0)會員中心 聯(lián)系客服 幫助中心供應(yīng)商合作 嘉立創(chuàng)產(chǎn)業(yè)服務(wù)群
領(lǐng)券中心備貨找料立推專區(qū)爆款推薦PLUS會員BOM配單 品牌庫PCB/SMT工業(yè)品面板定制

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

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

1 軟件定時器

1、接通延時型定時器:接通延時型定時器是各種PLC中最常見最基本的定時器,這種定時器在 SIEMENS的PLC中,稱為SD型定時器。
2、斷開延時型定時器:這種定時器是當(dāng)輸入條件00000為ON時無延時作用,只有在輸入條件00000為OFF時產(chǎn)生延時作用。在SIEMENS的PLC中,稱為SF型定時器。
3、保持型接通延時定時器:這種定時器是當(dāng)輸入條件00000為ON后,即產(chǎn)生鎖存功能,即使輸入條件00000又變?yōu)镺FF,仍視輸入條件為ON,當(dāng)定時器的當(dāng)前值等于設(shè)定值時,定時器動作,這種定時器在SIEMENS的PLC中,稱為SS型定時器。
4、脈沖型定時器:這種定時器是當(dāng)輸入條件00000為ON后,定時器即時動作,但經(jīng)過定時器所設(shè)定的時間后,即使輸入條件00000仍為ON,定時器卻變?yōu)镺FF狀態(tài)。即這種定時器ON狀態(tài)的維持時間是由設(shè)定值決定的。如果00000為ON的時續(xù)時間小于定時器的設(shè)定值,定時器的ON狀態(tài)維持時間為輸入條件00000為ON的持續(xù)時間。這種定時器在SIEMENS的PLC中,稱為SP型定時器。
5、擴張型脈沖定時器:這種定時器與脈沖型定時器的區(qū)別是,只要輸入條件00000出現(xiàn)了ON狀態(tài),不管其持續(xù)時間多長,均可使定時器為ON的維持的時間與定時器的設(shè)定值一致。這種定時器在SIEMENS的PLC中,稱為SE型定時器。



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


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


2 多線程區(qū)別

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

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

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

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()《《“********************************************”;

}

定時器與線程的區(qū)別

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

再看線程:

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。



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