Private Sub a1_Click()sleep 5000 '这是一段程序,有时执行时间短,有时长。有时候过长难以忍受,但不是循环,用a2.click使其在需要的时间点上停止下来。if time>4000 then exit a1 '这里是瞎写的,不符合VB规则。实际应该如何写程序,能让a1在规定的时间点上停下来,而不至于等待时间太长(假死)。
end sub
上面已经描述的很清楚了,就是a1 可能执行时间过长,只要能使a1中途停下来就成。谢谢各位大哥。

解决方案 »

  1.   

    http://zhidao.baidu.com/question/52415914.html对,我就是做的 XMLHTTP 下载内容,他说1 如果是像调用XMLHTTP控件或SOCKET套接字,可以把阻塞改成非阻塞。 请问该怎么操作?
      

  2.   

    定义一全局级变量
    dim flag as booleanPrivate Sub a1_Click()sleep 5000 if time>4000 then  flag=true
    end sub在a1过程或函数中
    if flag then exit sub/function
      

  3.   

    TO 2 楼你的答案似乎没有解决我的问题。按照你的程序,也是先执行 sleep 5000,再执行 flag=true如果sleep造成假死,那么永远都不会执行 flag=true 这一条,那这个程序也就永远不能停止下来。
      

  4.   

    你是要下载东西,用异步吧.反正都使用了组件,那就再多用点东西.给你个多线程下载的例子:http://www.m5home.com/blog/article.asp?id=65
      

  5.   

    sleep假死只是暂时,除非你“睡死"
    如果你想在sleep过程中执行其它的,肯定的用多线程了,或者,改其它思路,不用sleep了
      

  6.   

    用API函数,
    timeSetEvent
    timeKillEvent
    这样CPU占用率没那么高
      

  7.   

    to 5楼你给我推荐的代码我昨天已经下载了并分析了。我现在做的工作仅仅是下载网页文本文件,还没到下载软件方面的工作,而且他的代码也太复杂,暂时只准备用迅雷作为替代方案,还没打算用他的代码。
    to 6楼我这里主要不想贴代码,所以用了个sleep,表示执行这段程序需要很长时间,而且有可能假死。随后,我在1楼说明了我是想用 XMLHTTP。不过现在用 MSXML2.ServerXMLHTTP 的超时参数将问题解决了。假如说,问题不解决的话,我想应该是必须用超线程的。
    to 7 楼对于我这样问这种简单问题的人来说,贴个函数基本没用。我其实是想解决当某sub正在运行的时候,如何让他中止下来,(循环可用doevents,但这里恰恰没有循环)。多线程似乎是唯一可以选择的,用另外一个线程kill这个线程吧。
    总之,这个问题算是解决了。以后还会有很多问题,前天晚上刚学vb,今天刚刚写完,调试没有问题了,不过bug肯定有,还有一些功能模块似乎没有添加上。而且只做了一个窗体,显得单调了些谢谢各位,稍后结贴。