【主題】:每0.1秒產生一10位數的亂數,記錄每次產生的資訊,如附圖,每10秒鐘存檔一次,存入記事本純文字檔。
【說明】:此主題乃由上一篇文章編修功能而來,主要的差別在於,增強記錄的資訊。每0.1秒的資訊都要存入檔案,因此須先存入100元素的陣列,每10秒存入檔案,時間格式,應知識網友的要求,必須以0.1秒的高解析度來記錄。
【難題】:由於0.1秒這麼短的時間內,要處理敘述很多,由結果發現,敘述+存檔的時間約佔了約0.1秒,以致於1秒鐘內只記錄了9個資料(大部份)。
Rem cnt=計數用,item=項目編號,num=10位數亂數(倍精數),tt=系統日期時間,dot=0.1秒變化標記,lastrec=最後記錄的秒數值
Rem 輸出記錄格式:如附圖。


Dim cnt As Integer
Dim item As Single
Dim num(99) As Double '10/0.1=100,需要100個元素的陣列
Dim times(99) As String
Dim tt As Variant
Dim dot As Integer
Dim lastsec As Integer
Private Sub Form_Load()
cnt = 0
item = 0
dot = 0
Rem ------------------------
Rem 亂數產生週期=0.1秒
Timer1.Interval = 100
Rem 開啟文字檔,寫入檔案欄位資訊
Open "c:\temp.txt" For Output As #1
Title = "編 號____日期時間____產生的亂數______"
Write #1, Title
Close #1
ss = Second(Now)
Timer1.Enabled = False
Do While ss = Second(Now) '確保當換秒時才開始計時
Loop
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
Rem 確保產生10位數之亂數,設定最小值為1000000000
Rem 10位數之數值,以倍精數設定
num(cnt) = Fix((9999999999# - 1000000000#) * Rnd) + 1000000000#
tt = Now
hh = Format(Hour(tt), "00") '輸出格式2位數
mm = Format(Minute(tt), "00")
ss = Format(Second(tt), "00")
If lastsec <> ss Then '當秒數變換時,重設dot
dot = 0
End If
times(cnt) = hh & ":" & mm & ":" & ss & "." & dot '輸出時間格式 xx:xx:xx.x
lastsec = ss '記錄最後的秒數
Text1 = num(cnt) '監視用
Text2 = item
Text4 = cnt
dot = dot + 1
cnt = cnt + 1
Rem cnt=100次=10秒,存入亂數資訊。
Rem 由於開檔存檔需要時間必當產生些微秒差,由測試結果發現,處理的時間約為0.1秒,也就是說,在1秒內理應產生10個亂數值,結果只存入
Rem 9個,這是很合理的現象,換句話說,0.1秒的間距是不夠CPU來處理Timer1內的所有敘述。是不是要有其他分工的方式處理??
If cnt Mod 100 = 0 Then
Open "c:\temp.txt" For Append As #1
For i = 0 To 99
item = item + 1
Text3 = times(i)
Write #1, item, times(i), num(i)
Next
Close #1
Erase times, num '刪除陣列,準備儲存下一個10秒鐘
Rem 一星期後關閉視窗
Rem 一星期=7*24*60*60=604800秒
Rem 測試用只設定執行300次,視實際需要,選擇下列2列的其中一種來執行。
Rem If item > 604800 Then
If item >= 300 Then
Timer1.Enabled = False
Unload Me
End If
cnt = 0
End If
End Sub