各位大侠,我的程序需要半个小时后再执行操作,但是我怕这段时间一直搁那儿挺耗资源的,请问大侠们又啥好办法,能最大程度的节省等待期间的系统资源占用呢?

解决方案 »

  1.   

    多窗体只留一个,留下的一个窗体上的控件能卸载就卸载,对象变量能设为Nothing的设为Nothing,一个计时器计时,到点后再将窗体和对象恢复.------能最大程度的节省等待期间的系统资源占用吗?
      

  2.   

    自己用 GetMessage 写个消息循环, 开销是绝对最小的
    do
      select case getmessage(msg,0,0,0,0)
        case 0: exit do
        case else
            xxxx
        
      end select
    loop
      

  3.   

    如果主线程在等待期间没什么正经事做, 建议创建一个进程级事件,然后创建一个线程,主线程进入事件等待的状态, 第2个线程只做timer时间测量, 要使用上面的消息循环, 到时间后,触发事件,并退出消息循环,退出线程, 这时主线程已经自动恢复活动状态, 当他睡醒了的时候就是到时了其实如果觉得事件麻烦的话,用临界点会更方便.第2个线程不要做直接操作对象的事情, 只做基本的api操作,基本的数据运算,写在模块中,这样这个线程不会崩溃的
      

  4.   

    CreateWaitableTimer
    WaitForSingleObject
      

  5.   

    do loop空循环过程好像比sleep的过程更耗系统资源
      

  6.   

    我的建议是..............添加一个1秒的定时器,再在定时器里面:if xx=1800 then
       timer1.enabled=false
       call XXXXXXXXXX
    end if就是这样........
      

  7.   

    楼上的我顶,还需要一个窗体级变量xx
    xx=xx+1
    if xx=1800 then 
      timer1.enabled=false 
      call XXXXXXXXXX 
    end if 
      

  8.   

    Sub Delay(s As Double)  '延时函数,单位为秒
    Dim StartTimer As Variant
    Dim OldTimer As Variant
    Dim DelayYear As Long, DelayDay As Integer
    StartTimer = Timer
    Do
         DoEvents
         If Timer < OldTimer Then
             If DelayDay > 365 Then
                 DelayYear = DelayYear + 1
                 DelayDay = 0
             Else
                 DelayDay = DelayDay + 1
             End If
         End If
         OldTimer = Timer
    Loop Until (DelayYear * 365 + DelayDay) * 86400 + Timer - StartTimer > s
    End Sub
    我用的这个,发现很耗资源啊,短时间等待还没啥长了就麻烦
      

  9.   

    我在模块中设form1.timer6.enabled=True
    但是窗体中的timer中没反应啊
      

  10.   

    Timer 控件的 InterVal 属性要设毫秒数。
      

  11.   

    还有一种方案,如果开启了计划任务,用 Shell "AT ..." 添加一个定时任务启动本程序,然后程序就可以退出了。
      

  12.   

    Timer控件就可以了, 
    先定义个计数器,然后在TIMER事件中累加,当计数器达到累积时间就开始调用你的程序处理代码:DIM I AS LONGSUB FORM_LOAD()
    TIMER1.INTERVAL=10000  '折合10秒触发一次
    END SUBSUB TIMER1_TIMER()
    I=I+1
    IF I>180 THEN'180X10秒是不是半个小时啊
       调用过程
       TIMER1.ENABLE=FALSE   '假设只做一次的,那么这里就加上这句
       I=0 '假设要再半个小时执行一次的,那么就加这句
    ENDIF
    END SUB楼主明白了么?
      

  13.   

    使用 Timer控件应该是最好的选择, 当然,长时间的话,因为Timer1.Interval的限制, 你可以在Timer1事件里面,加上GetTickCount这个API
      

  14.   

    顶使用CreateWindowEx的消息循环