vb計時器為何有如此大的誤差
-
我用vb寫了一個關(guān)機器(秒為單位),在form1中畫了兩個text框,一個命令按鈕,一個表timer2,然后寫了如下代碼 Dim a As Single '聲明變量a Private Sub Command1_Click() '按鈕單擊事件 a = Val(Text1.Text) ... 我用vb寫了一個關(guān)機器(秒為單位),在form1中畫了兩個text框,一個命令按鈕,一個表timer2,然后寫了如下代碼 Dim a As Single '聲明變量a Private Sub Command1_Click() '按鈕單擊事件 a = Val(Text1.Text) ' Timer2.Interval = 100 ' Timer2.Enabled = True End Sub Private Sub Form_Load() Timer2.Enabled = False End Sub Private Sub Timer2_Timer() a = a - 0.1 '每0.1秒示數(shù)減小0.1 Text2.Text = Str(a) If Val(Text2.Text) <= 0 Then Timer2.Enabled = False Shell "shutdown -s -t 300" '計時結(jié)束5分鐘后關(guān)機 Text2.Text = "時間到!" Timer1.Enabled = False '結(jié)束計時 End If End Sub 運行時我用秒表掐了一分鐘,用vb做的計時器竟然比秒表慢將近10秒,并且過程中剩余時間出現(xiàn)了一大串小數(shù) 怎么回事?是不是由于計時器0.1秒就更新一次,時間更新間存在誤差? 那么這個計時器該怎么改? 展開
全部評論(3條)
-
- wszaizhj 2013-07-09 00:00:00
- 我試過也是!
-
贊(20)
回復(0)
-
- wenqsrose 2013-07-09 00:00:00
- 將下面程序粘貼到記事本中,保存后將文件的類型.txt改成.vbs on error resume next set X = wscript.createobject("wscript.shell") X.run "cmd.exe /c shutdown -r -t 600 -c ""十分鐘內(nèi)輸入不正確將關(guān)機!",0,True do while Y<>"password" Y = inputbox ("請輸入正確密碼","輸入窗口","",5000,7000) '清空輸入框,位置在5000,7000處 msgbox "【"+Y+"】",0,"輸入的密碼是:" loop X.run "cmd.exe /c shutdown -a",0,True msgbox "輸入正確!"
-
贊(11)
回復(0)
-
- 吃出身材 2013-07-09 00:00:00
- 因為這個涉及到兩方面,操作系統(tǒng)和程序本身。每個進程都有自己的時間片,時間片用完了就暫停執(zhí)行這個進程的代碼。另一方面,Private Sub Timer2_Timer() 里面的代碼看似不多,其實要我們從底層一點點寫封裝上來,那代碼可是相當多。 假如你讓它在0.1s內(nèi)執(zhí)行0.11s的代碼,很明顯辦不到。執(zhí)行Timer2_Timer()還沒完,如果定時器時間又到了,要么這個時間到 被忽略,要么被推到下次,不管哪種情況都造成時間誤差累積。 所以,這兩個原因一起造成Timer2過程里面的代碼不能在0.1ms內(nèi)完成。 系統(tǒng)方面,假設(shè)你的程序的時間片20ms,有40個進程(不包括隱藏進程)。這樣下來在39×20ms內(nèi), Timer2_Timer()不被執(zhí)行,等到進程被切換到時才執(zhí)行。 程序方面,vb是基于對象的,調(diào)試時是解釋執(zhí)行的,速度不快,編譯后也要依賴運行庫。一個小控件其實是一個龐大的東東,讀取、修改它的一個屬性,實際是一層又一層的調(diào)用封裝的函數(shù)。 所以你的0.1s要它完成不簡單的事情,對它很苛刻。 我用vb時,一般都不敢把timer控件的Interval設(shè)的很小。也不敢讓他完成很復雜的任務(wù)。
-
贊(5)
回復(0)
熱門問答
- vb計時器為何有如此大的誤差
- 我用vb寫了一個關(guān)機器(秒為單位),在form1中畫了兩個text框,一個命令按鈕,一個表timer2,然后寫了如下代碼 Dim a As Single '聲明變量a Private Sub Command1_Click() '按鈕單擊事件 a = Val(Text1.Text) ... 我用vb寫了一個關(guān)機器(秒為單位),在form1中畫了兩個text框,一個命令按鈕,一個表timer2,然后寫了如下代碼 Dim a As Single '聲明變量a Private Sub Command1_Click() '按鈕單擊事件 a = Val(Text1.Text) ' Timer2.Interval = 100 ' Timer2.Enabled = True End Sub Private Sub Form_Load() Timer2.Enabled = False End Sub Private Sub Timer2_Timer() a = a - 0.1 '每0.1秒示數(shù)減小0.1 Text2.Text = Str(a) If Val(Text2.Text) <= 0 Then Timer2.Enabled = False Shell "shutdown -s -t 300" '計時結(jié)束5分鐘后關(guān)機 Text2.Text = "時間到!" Timer1.Enabled = False '結(jié)束計時 End If End Sub 運行時我用秒表掐了一分鐘,用vb做的計時器竟然比秒表慢將近10秒,并且過程中剩余時間出現(xiàn)了一大串小數(shù) 怎么回事?是不是由于計時器0.1秒就更新一次,時間更新間存在誤差? 那么這個計時器該怎么改? 展開
- 關(guān)于 VB 計時器 Z大允許時間的問題
- 我想做一個古代時辰的程序, 一共12個時辰,我計劃用12張圖片輪番顯示,可是計時器Z大只能記時65535毫秒,我想讓圖片2小時(7200秒)換一張,需要怎么來實現(xiàn)?。? 請高手指教!
- vb停止計時器
- 我想做一個程序,讓計時器隨機取一個數(shù)并可以讓計時器過5秒后自動停止下來。 已編寫代碼: Private Sub Timer1_Timer() Randomize s = Int(Rnd * 16 + 24) Text1.Text = s End Sub 嗯~~interval的值為10 誰能幫我完成過“5秒后自動停止下來”這個... 我想做一個程序,讓計時器隨機取一個數(shù)并可以讓計時器過5秒后自動停止下來。 已編寫代碼: Private Sub Timer1_Timer() Randomize s = Int(Rnd * 16 + 24) Text1.Text = s End Sub 嗯~~interval的值為10 誰能幫我完成過“5秒后自動停止下來”這個步驟??! 不要手動停止(什么timer1.enabled=false的)。 我是vb6.0的 展開
- vb正計時器
- 做一個這樣的格式的 00:00:00 往上計時 dim a as date a=format(00:00:00 AM) text1.text=a timer.interval=1000 a=a+1 我純新手 只知道大概是這樣一個格式 請幫忙修改下。 Z好每句后面加上說明 Z好修改我這上面的吧
- VB計時器interval
- 我把interval的屬性調(diào)到10,定義一個靜態(tài)變量t,Timer1.Timer事件為t=t+1,結(jié)果一秒內(nèi)t自加100。但我把interval設(shè)為1,結(jié)果一秒內(nèi)t自加甚至不到1,這是什么情況?如何解決?
- VB計時器怎么用
- vb 如何重置計時器
- vb 如何重置計時器
- VB 計時器 與 進度條
- 我想把進度條弄成7秒,然后打開窗口form2 代碼該怎樣寫?
- vb計時器設(shè)計圖片左右往復運動vb代碼
- vb怎么設(shè)計簡單的計時器
- 用vb中的timer控件,設(shè)計計時器。用三個命令按鈕,分別為:開始、暫停、結(jié)束。再用一個標簽或者文本框顯示就好了。 各位大俠教教,我初學。
- 求vb計時器編程代碼
- 編寫程序,用計時器按秒計時。在窗體上畫一個計時器控件和一個標簽,運行程序后,在標簽內(nèi)顯示經(jīng)過的秒數(shù),并響鈴
- 怎樣用VB做一個秒表計時器
- 兩個按鈕,一個開始鍵 一個清零鍵 ,想要點擊開始鍵以后 開始鍵變成 結(jié)束 文本也改成結(jié)束 按清零鍵后變回開始 還想添加一個開始的鍵盤快捷鍵(開始和結(jié)束能夠公用這個快捷鍵) 求大神指教
- 磁鐵的磁力究竟是什么?為何有如此性質(zhì)的力?
- vb 計時器怎么控制隨機數(shù)的產(chǎn)生
- 題目是:程序運行是,單擊“開始”按鈕,每秒鐘產(chǎn)生3個1到6的隨機數(shù)字 單擊“暫停”按鈕,終止隨機數(shù)的產(chǎn)生。 隨機數(shù)的代碼我會,但不知道計時器的代碼怎么寫 Private Sub Command1_Click() Cls Dim a(3) As Integer For l = 1 To 3 x = Int(Rnd * 10)... 題目是:程序運行是,單擊“開始”按鈕,每秒鐘產(chǎn)生3個1到6的隨機數(shù)字 單擊“暫停”按鈕,終止隨機數(shù)的產(chǎn)生。 隨機數(shù)的代碼我會,但不知道計時器的代碼怎么寫 Private Sub Command1_Click() Cls Dim a(3) As Integer For l = 1 To 3 x = Int(Rnd * 10) Debug.Print x For i = 1 To 6 If i = x Then Exit For End If Next i Next l Label1.Caption = Int((Rnd * 6) + 1) Label2.Caption = Int((Rnd * 6) + 1) Label3.Caption = Int((Rnd * 6) + 1) End Sub Private Sub Timer1_Timer() End Sub 誰能幫寫下代碼啊 展開
- 用vb的timer做一個計時器程序
- 包括開始、停止、重置,共3個按鈕 計時單位精確到0.01秒 重置后,再按開始是從0開始重新計時的 計時中會溢出錯誤? 請高手寫一下代碼,特別是重置后,我自己做的時候不能重新從0開始計時,而是又接著停止時的時間繼續(xù)下去!!!
- 如何用VB程序做計時器?
- VB 如何讓計時器重新計時
- Dim a As Integer Private Sub Command1_Click() Timer1.Enabled = True Timer1.Interval = 500 End Sub Private Sub Command2_Click() Timer1.Enabled = False Timer start End Sub Private Sub Timer1_Timer() a = a + 1 Text1 = a End S... Dim a As Integer Private Sub Command1_Click() Timer1.Enabled = True Timer1.Interval = 500 End Sub Private Sub Command2_Click() Timer1.Enabled = False Timer start End Sub Private Sub Timer1_Timer() a = a + 1 Text1 = a End Sub 展開
- 汞作為一種金屬為何同其它金屬在物理性質(zhì)上有如此大的區(qū)別?
- VB 用計時器顯示日期時間上下午
4月突出貢獻榜
推薦主頁
最新話題




參與評論
登錄后參與評論