【问题标题】:VB6 Timeout the function if no responseVB6 如果没有响应则超时功能
【发布时间】:2015-02-26 20:46:06
【问题描述】:

我在一个 VB6 应用程序中有一个函数可以强制程序无法访问。有时,当函数中发生错误时,最终用户不会收到结果,并且可能仍然认为后台发生了某些事情。

因此,我正在考虑添加一个超时功能。我知道该函数应该在 1-2 秒内返回结果,如果没有出现错误,我们必须中断函数并返回错误。

如何在VB6中实现这种“超时”?

【问题讨论】:

  • 当您发布与您的问题相关的代码时,您更有可能得到答案。如果没有您的代码,试图回答的人必须猜测您在做什么,并且只能给出一般性的答案。
  • 延迟的原因是什么?这是一个非常长的计算需要大量运行时间,还是等待网络中的另一台计算机响应?
  • 函数来自DLL,它正在等待另一台计算机的响应。我会对某种类型的包装器感兴趣,如果没有找到响应,它会在 10 秒后超时。代码的基本示例:“Call CheckConnection()” - 运行时必须从另一台计算机获得响应,而没有它的功能不断搜索。
  • 您可能对 VB6 不走运。对 DLL 的调用是“进程内”的,因此线程被阻塞并且不能被中断。
  • 我明白了,所以它必须在 C++ 中完成,其中编写了 DLL。

标签: vb6


【解决方案1】:

也许下面的示例会有所帮助,它假定您的表单上有一个名为 Timer1Timer 控件

Private Function TestFunction() As Boolean

    On Error GoTo TestFunctionErrHandler

    Me.Timer1.Interval = 1000 ' set time to fire one time per second
    ' code for (function should return result within 1-2 seconds) here

    Exit Function

TestFunctionErrHandler:
    ' code for error condition here

End Function

Private Sub Timer1_Timer()
    Static seconds As Integer

    seconds = seconds + 1

    If seconds >= 2 Then
        ' code for (forces the program to be inaccessible) here
    End If

End Sub

【讨论】:

  • 也可以将 Interval 设置为 2000 并完成它。但即便如此,阻塞调用也会阻止 Timer 事件处理程序被调用。
猜你喜欢
  • 1970-01-01
  • 2020-03-22
  • 2018-11-07
  • 2017-02-25
  • 2014-06-10
  • 1970-01-01
  • 2011-01-17
  • 2012-09-08
  • 1970-01-01
相关资源
最近更新 更多