新聞| | PChome| 登入
2007-06-10 17:20:03 | 人氣92| 回應0 | 上一篇 | 下一篇
推薦 0 收藏 0 轉貼0 訂閱站台

10位數之亂數產生與存檔,記錄每0.1秒的資訊

 

【主題】:每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

台長: Kenny
人氣(92) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 教育學習(進修、留學、學術研究、教育概況) | 個人分類: 程式設計 |
此分類下一篇:如何刪除指定資料夾中某日期以前的舊檔案
此分類上一篇:倒時計數器,自動關閉表單

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文