亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        巧用Timer定時器解決VB中循環(huán)造成的假死現(xiàn)象

        2018-01-22 01:48:40何偉
        電腦與電信 2017年11期
        關(guān)鍵詞:進(jìn)度條命令行程序運行

        何偉

        (甘肅省天水市職業(yè)技術(shù)學(xué)校,甘肅 天水 741000)

        1 引言

        在使用VB語言編程過程中,如果遇到循環(huán)次數(shù)過多的循環(huán)命令或循環(huán)的嵌套層次較多時,很容易出現(xiàn)假死甚至假死機現(xiàn)象,而且循環(huán)執(zhí)行的過程中用戶無法進(jìn)行中斷。隨著操作系統(tǒng)的不斷完善,現(xiàn)在這種情況變成了“程序未響應(yīng)”現(xiàn)象。在循環(huán)體中,如果加入一個進(jìn)度條顯示命令,也根本看不到進(jìn)度的顯示,想停下來,各種命令按鈕也不再起作用。隨著社會的發(fā)展需求,我們對軟件的要求并不是短小精悍,而是更加注重人性化操作。例如有一段命令需要執(zhí)行1萬次,在執(zhí)行的過程中應(yīng)該能隨時了解運行的情況,而且隨時可以終止或暫停,尤其是在程序執(zhí)行過程中,CPU占用資源要盡量少,不影響其他軟件的工作,這樣一來,再復(fù)雜的程序我們都可耐心等待。如果程序能自動根據(jù)計算機的實際配置調(diào)整計算機CPU的占用率,那就再好不過了。經(jīng)過本人長期的摸索探討,終于找到一個較好的解決辦法:利用Timer定時器控件能設(shè)定循環(huán)的時間,再根據(jù)自己需求設(shè)定參數(shù)可更改循環(huán)數(shù)值,我們剛好利用它的這一獨特性來巧妙解決問題。

        2 問題的提出

        我們在利用高級語言程序進(jìn)行編程過程中,在處理具有相同的、有規(guī)律性的重復(fù)操作時,簡潔的辦法都會使用循環(huán)語句來處理。

        用一個簡單的程序來說明如下:

        例如,計算s=1+2+3+……+n

        如果程序要求從1加至100,這個程序則很簡單,使用循環(huán)語句命令如下:

        這個程序命令很簡單,就是從1加到100,循環(huán)重復(fù)執(zhí)行S=S+i語句100次,就求出了結(jié)果。這個程序初學(xué)者也能輕松掌握和理解,這個程序經(jīng)常作為初學(xué)者的教學(xué)累加實例。

        但理論和實際往往有一定的差別,以FOR循環(huán)命令為例,編程命令在使用過程中,如果遇到大的循環(huán)命令或循環(huán)的嵌套,很容易出現(xiàn)假死甚至死機現(xiàn)象,而且循環(huán)執(zhí)行的過程中用戶無法中斷。在進(jìn)度條和很多軟件中的也不同,經(jīng)常只顯示第一步和最后一步,中間的過程并不顯示。例如我們?nèi)绻嬎銖?加到100萬或者從1加到100億,這段程序的執(zhí)行就變得完全不同,即便配置和運算速度高的計算機,隨著運算次數(shù)的越來越多,運算數(shù)據(jù)的不斷增加,當(dāng)達(dá)到機子運算極限時,就會出現(xiàn)假死或死機現(xiàn)象。

        3 初步解決方案

        那么我們?nèi)绾谓鉀Q這個問題呢?經(jīng)過本人多次長期的摸索探討,終于找到一個較好的解決辦法,那就是利用VB中的Timer定時器控件。我們知道Timer定時器控件功能是在指定的時間間隔內(nèi)反復(fù)觸發(fā)指定窗口的定時器事件,我們可以看到這個控件的功能和循環(huán)語句是多么的相像,唯一不同點就是這個控件能設(shè)定循環(huán)的時間,所以我們剛好利用它的這一獨特的特性來解決問題。

        我們現(xiàn)在重新編寫上段程序,步驟如下:

        (1)添加控件:(為了使程序方便大家閱讀,控件都使用默認(rèn)名稱)

        定時器Timer1放入循環(huán)體,初始要設(shè)置成禁用,即Enabled項為False

        按鈕 Command1'用于控制程序的“開始”和“繼續(xù)”

        按鈕 Command2'用于控制程序的“暫?!?/p>

        進(jìn)度條ProgressBar1'用于顯示和查看程序運行進(jìn)度

        文本框Text1 '用于顯示i的當(dāng)前值

        文本框Text2 '用于顯示S的當(dāng)前值

        (2)添加代碼:

        Dim i as Double'用于控制循環(huán)運行次數(shù),由于數(shù)據(jù)量大,就定義成雙精度

        Dim SAs Double'用于計算和值

        Private Sub Form_Load()'程序初始,定義一些控件的初始值

        i=0'初始循環(huán)的次數(shù)

        S=0'初始和值

        Timer1.Interval=10 '設(shè)置定時器的運行速度,單位毫秒,目前為10毫秒

        ProgressBar1.Max=10000'定義進(jìn)度條的最大值

        ProgressBar1.Value=0'初始進(jìn)度條進(jìn)度,當(dāng)前為0

        End Sub

        Private Sub Command1_Click()

        Timer1.Enabled=True'只需讓定時器工作,循環(huán)就開始

        End Sub

        Private Sub Timer1_Timer() '計時器控件、放置循環(huán)體

        i=i+1

        If計數(shù)<=10000 then

        S=S+i

        ProgressBar1.Value=i'顯示當(dāng)前進(jìn)度

        Text1.text=i'顯示 i的當(dāng)前值

        Text2.text=S'顯示S的當(dāng)前值

        Else

        Timer1.Enabled=False'循環(huán)結(jié)束

        End If

        End Sub

        Private Sub Command2_Click()'控制循環(huán)結(jié)束或暫停按鈕

        Timer1.Enabled=False'定時器停止,循環(huán)結(jié)束

        End Sub

        程序執(zhí)行主要過程是,兩個按鈕的作用只是控制定時器的“啟用”和“禁用”,定時器內(nèi)部的IF語句控制程序是否結(jié)束,兩個文本框,一個顯示i值,一個顯示S值,配合進(jìn)度條讓程序的執(zhí)行不顯得單調(diào),用戶可以很容易判斷出,程序還需執(zhí)行多少時間。經(jīng)過改編程序后,其優(yōu)點是:在目前的情況下,不論多么配置低檔的計算機,都能平穩(wěn)地運行代碼,而且隨時可以暫?;蛲V梗M(jìn)度條也真正開始顯示實際進(jìn)度。但缺點是:顯而易見,命令多了很多,也復(fù)雜了很多,如果一個軟件中出現(xiàn)諸多的循環(huán)體,命令行要增加許多倍。而且,資源的消耗雖然變小了,但運行的時間增加了幾百倍。

        4 優(yōu)化解決方案

        所以程序至此,雖然解決了主要問題,但還有不少缺點,需要我們進(jìn)一步分析解決:

        仔細(xì)深入分析,問題一,程序運行時間過長。直接使用For循環(huán),大循環(huán)容易造成資源消耗過大,導(dǎo)致死機現(xiàn)象。而使用Timer控件,則出現(xiàn)資源浪費,運行時間過長。但我們?nèi)绻麑⑦@兩者巧妙結(jié)合,這個問題就迎刃而解了,所以我們得到了更好的解決方法,就是將Timer1內(nèi)部中所有的命令看成一個<命令行>,原程序可表示為:

        Private Sub Timer1_Timer()

        <命令行>

        End Sub

        這樣,控件Timer1每次只執(zhí)行一次<命令行>,運行穩(wěn)定,但資源浪費嚴(yán)重,速度較慢,所以我們進(jìn)一步可將程序改寫如下:

        Private Sub Timer1_Timer()

        for j=1 to 500'每次執(zhí)行500次

        <命令行>

        next j

        End Sub

        根據(jù)自己需求或計算機配置可更改循環(huán)數(shù)值,這樣一來,兩者兼?zhèn)?,程序運行既平穩(wěn),速度也不慢。這樣我們就很好地解決了第一個問題。

        存在的第二個問題是:循環(huán)命令多,程序變得復(fù)雜。

        經(jīng)過改進(jìn)的程序中用到100個循環(huán),按最初的設(shè)計我們需要添加100個Timer控件,這樣程序變得更加龐大而且顯得笨拙。經(jīng)過探究思索,我們僅僅需要利用一個選擇語句Select,就可巧妙地解決問題。

        程序改寫如下:

        先定義一個變量K,由按鈕或命令控制其數(shù)據(jù)。

        Private Sub Timer1_Timer() '計時器控件、放置循環(huán)體

        Select case K 'K為循環(huán)控制參數(shù)

        Case 0

        <循環(huán)體1>

        Case 1

        <循環(huán)體2>

        ……

        End Select

        End Sub

        我們現(xiàn)在看到,循環(huán)增加了很多,但命令并不是成倍增長,增加量并不多。如果還覺得程序體太長,不宜編寫和調(diào)試,還可使用函數(shù),再次進(jìn)行修改如下:

        Private Sub Timer1_Timer() '計時器控件、放置循環(huán)體

        Select case K 'K為循環(huán)控制參數(shù)

        Case 0:Call自定義函數(shù)A

        Case 1:Call自定義函數(shù)B

        ……

        End Select

        End Sub這樣我們就很好地解決了第二個問題。

        5 結(jié)語

        至此,我們經(jīng)探究設(shè)計,終于找到一個較好的解決辦法,那就是利用VB中的Timer定時器控件,解決了直接使用For循環(huán),程序運行時間過長,容易造成資源消耗過大,導(dǎo)致死機的現(xiàn)象。而使用Timer控件,又會出現(xiàn)資源浪費。但我們?nèi)绻麑⑦@兩者結(jié)合,就是將Timer1內(nèi)部中所有的命令看成一個<命令行>,這個問題就迎刃而解了,進(jìn)一步我們利用一個選擇語句Select和函數(shù),就很巧妙地解決了以上問題。

        [1]趙曉麗.基于S p r i n g的定時器的應(yīng)用實現(xiàn)[J].太原師范學(xué)院學(xué)報:自然科學(xué)版,2015(4):48-53.

        [2]任君玉,黎國文.網(wǎng)絡(luò)中的定時器技術(shù)[J].電腦知識與技術(shù):學(xué)術(shù)交流,2011(7 X):5094-5095.

        [3]侯婷.淺談V B F OR循環(huán)嵌套的運行機制[J].教育教學(xué)論壇,2012(9):169-180.

        猜你喜歡
        進(jìn)度條命令行程序運行
        水管接水
        詩潮(2025年2期)2025-03-06 00:00:00
        為什么進(jìn)度條到99%就不動了
        旗幟文摘(2020年5期)2020-06-09 12:20:12
        為什么進(jìn)度條到99%就不動了
        意林(2020年10期)2020-06-01 07:26:37
        為什么進(jìn)度條到99%就不動了
        知識窗(2020年3期)2020-04-02 07:08:28
        行政公益訴訟訴前程序運行檢視
        法大研究生(2020年2期)2020-01-19 01:43:04
        Windows 10新版CMD更新
        Linux系統(tǒng)下GRIB2格式GFS資料轉(zhuǎn)為GRIB1格式的方法詳解
        論刑事錯案的成因
        《刑事訴訟法》修改背景下刑事和解制度淺析
        低碳生活,從命令行開始
        亚洲级αv无码毛片久久精品| 日本道免费一区二区三区日韩精品| а√天堂8资源中文在线| 中日韩精品视频在线观看| 久久无码高潮喷水免费看| 国产一区二区三区涩涩涩| 白白发在线视频免费观看2| 人与禽性视频77777| 亚洲天堂99| 国产一区二区三区视频了| 国产av一区二区三区在线播放| 一区二区三区四区国产亚洲| 国产精品一区二区日本| 国产绳艺sm调教室论坛| 亚洲国产美女在线观看| 亚洲精品一区二区三区日韩 | 欧美乱妇高清无乱码免费| 国产女人高潮视频在线观看| 亚洲av无码成人网站www| 视频在线播放观看免费| 日韩日韩日韩日韩日韩日韩日韩| 香蕉久久福利院| 国产精品国产三级国产专区5o| 中文字幕一区二区三区综合网| 999精品无码a片在线1级| 18禁无遮挡羞羞污污污污网站| 亚洲精品99久久久久久| 国产一级黄色录像大片| 久久久亚洲欧洲日产国码αv| 97色在线视频| 亚洲精品综合一区二区| 欧美精品欧美人与动人物牲交| 黑人玩弄人妻中文在线 | 一二区视频免费在线观看| 香蕉久久一区二区不卡无毒影院| 四虎影视在线影院在线观看| 久久国产精品免费一区二区| 国产av天堂一区二区二区| 东京热无码av一区二区| 亚洲精品中文字幕无乱码麻豆| 麻豆夫妻在线视频观看|