我需要编写一个复杂的反复迭代运算程序,运算第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 SubPrivate 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 SubPrivate Sub Timer1_Timer()
     i = i + 1   
End SubSub 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组来,就是费事些

解决方案 »

  1.   

    试试:Private Sub Command1_Click()
        bpause=not bpause
    end sub
    .....
    ''在下面这句后面加
    '在这里判断timer才会暂停程序,但怎么和 Command1_Click联系
    do while bpause
       doevents
    loop
    .....
      

  2.   

    謝謝,我試試看,估計還要在do while之前使用doevents,先釋放,不要點不了按鈕
      

  3.   

    我知道怎么弄了
    调用全部放到timer里面,就可以实现暂停,这验证码》》》》》》》》》》
      

  4.   

    我已经实现,就像楼上说的,全部放到一个调用里面,用timer实施
      

  5.   

    Dim BO As Boolean
    Dim X As LongPrivate 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 SubPrivate Sub Command1_Click()  '按钮控制循环的暂停与开始
    BO = Not BO   ' 改变DO对象的值
    DoNext
    End SubPrivate Sub Form_Load()
    BO = True   'BO对象初值
    X = 0
    End Sub
    已经调试过一个没有问题。