我需要撰寫一個復雜的反復迭代運算程式,運算第n+1次與第n次結果計算誤差小于給定值0.00000000000000001。程式中涉及多組變數,運算時間較長,想設計一個暫停按鈕,想暫停的時候就點擊,并把程序變數保存下來,同時還可以恢復程式繼續運行。
我首先想到的是timer控制元件,可惜搞了幾天都未成功,望大神來幫幫

或者還有其他辦法(不用timer)也可以,但都說vb無法多執行緒
Sub yunsuan() '主程式
for i=1 to 100
for j=1 to 100
Do While Abs(a(i) - b(i)) < 0.00000000001
b(i) = a(i)
a (i)= 復雜的運算 '第n+1次與第n次迭代計算誤差小于給定值
DoEvents
'在這里判斷timer才會暫停程式,但怎么和 Command1_Click聯系
Loop
next
next
End Sub
謝謝cbm666大神的程式,不知如何關聯yunsuan
Private Sub Form_Load()
Command1.Caption = "開 始"
Timer1.Interval = 100
Timer1.Enabled = False
End Sub
Private Sub Command1_Click()
Timer1.Enabled = Not Timer1.Enabled
Select Case Command1.Caption
Case Is = "暫 停"
Timer1.Enabled = False
Command1.Caption = "繼 續"
Call MySleep(10)
Case Is = "繼 續"
Timer1.Enabled = True
Command1.Caption = "暫 停"
ForceStop = True
Case Else
Timer1.Enabled = True
Command1.Caption = "暫 停"
End Select
End Sub
Private Sub Timer1_Timer()
i = i + 1
End Sub
Sub MySleep(Delaytm&)
Command1.Caption = "繼 續"
ForceStop = False
Starttm = Timer
Do
DoEvents
If ForceStop Then Exit Do
Loop Until Timer - Starttm >= Delaytm
Command1.Caption = "開 始"
Command1_Click
End Sub
還有一個弱智的問題
我想在程式運行程序中,在form上像Excel表格那樣來實時重繪我的陣列值,暫停后能手動更改資料

用什么控制元件比較好
列數,行數,根據程式陣列大小自動判斷,這個不好解決也無所謂,我可以用text組來,就是費事些
uj5u.com熱心網友回復:
試試:Private Sub Command1_Click()
bpause=not bpause
end sub
.....
''在下面這句后面加
'在這里判斷timer才會暫停程式,但怎么和 Command1_Click聯系
do while bpause
doevents
loop
.....
uj5u.com熱心網友回復:
謝謝,我試試看,估計還要在do while之前使用doevents,先釋放,不要點不了按鈕uj5u.com熱心網友回復:
我知道怎么弄了呼叫全部放到timer里面,就可以實作暫停,這驗證碼》》》》》》》》》》
uj5u.com熱心網友回復:
我已經實作,就像樓上說的,全部放到一個呼叫里面,用timer實施uj5u.com熱心網友回復:
Dim BO As Boolean
Dim X As Long
Private Sub DoNext() '回圈的公用程序
I = X '這里賦值回圈的初值
Do
I = I + 1
If Not BO Then
Text1.Text = I '文本框顯示回圈的情況,I 的值的變化
DoEvents
Else
X = I
Exit Do
End If
'在這寫回圈中要執行的功能代碼
Loop While I < 500000 '設定要回圈的次數,修改500000的值就可以
End Sub
Private Sub Command1_Click() '按鈕控制回圈的暫停與開始
BO = Not BO ' 改變DO物件的值
DoNext
End Sub
Private Sub Form_Load()
BO = True 'BO物件初值
X = 0
End Sub
已經除錯過一個沒有問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/75283.html
標籤:VB基礎類
