軟件定時器和多線程的不同之處
2019-06-17 19:01:41閱讀量:534
1 軟件定時器
缺點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。
【內容聲明】本文刊載的所有內容,包括文字、圖片、音頻、視頻、軟件、程序、以及網頁版式設計等均在網上搜集。本文提供的內容或服務僅用于個人學習、研究或欣賞,以及其他非商業性或非盈利性用途,本網站不承擔任何法律責任。如涉及版權問題,請及時通知本網站刪除。

L7805CV-DG/線性穩壓器(LDO) | 0.5637 | |
AMS1117-3.3/線性穩壓器(LDO) | 0.1237 | |
BAT54C,215/肖特基二極管 | 0.0334 | |
LM358DR2G/運算放大器 | 0.35 | |
CJ431/電壓基準芯片 | 0.1147 | |
LM393DR2G/比較器 | 0.318 | |
ADUM4160BRWZ-RL/隔離式USB芯片 | 31.6 | |
SS8050/三極管(BJT) | 0.035 | |
8S005/錫膏/錫漿 | 17.67 | |
B0505S-1WR3/隔離電源模塊 | 2.34 |