关于DoEvents的使用的问题

 '========*=========*=========*=========*=========*=========*=========*=========*
'== 功    能:得到当前岗位上的人员的指纹
'== 参    数:ByRef myFingerPrint() As Byte,得到验证用的指纹
'              Index As integer 指纹机的index
'== 返 回 值:错误号
'== 性    质:VB固有事件
'== 作    者:
'== 修改记事:
'========*=========*=========*=========*=========*=========*=========*=========*
Private Function GetFingerPrint(ByRef myFingerPrint() As Byte, index As Integer) As Long
    Dim str As String
    Dim i As Long
    Dim buf() As Byte
    On Error GoTo errHandle
    '//发音
    If Me.Hmd(index).PlayVoice(&H0) Then
    End If
    Call WriteErrLogD("00", "提取指纹" & index & "  ", "GetFingerPrint")
    Do While Not Hmd(index).GetFeature(buf)
        i = i + 1
'        DoEvents '此处用DoEvents会导置运行非常慢,长时间才返回。去掉后就没有问题了。
        If i > m_GetFingerPrintTryCount Then Exit Do
        If i Mod 4 = 0 Then
            '//发音
            If Me.Hmd(index).PlayVoice(&H0) Then
            End If
        End If
        Call WriteErrLogD("00", "提取指纹,第" & i & "次  ", "GetFingerPrintPerson")
    Loop
    If i <= m_GetFingerPrintTryCount Then
        GetFingerPrint = errMsg.MSG_SUCCESS
        myFingerPrint = buf
    Else
        GetFingerPrint = errMsg.MSG_BU_ZAI_GANG_ERROR
    End If
    Exit Function
errHandle:
    Call WriteErrLog(Err.Number, Err.Description, "GetFingerPrint")
    GetFingerPrint = errMsg.MSG_FINGERPRINT_ERROR      '//实际中没有连接设备时会有错误
End Function

 

      DoEvents '此处用DoEvents会导置运行非常慢,长时间才返回。去掉后就没有问题了。

但是这个在原来的测试时是没有问题的。后来不知为什么有问题了。

下面的如果不用DoEvents会导置死循环。

'========*=========*=========*=========*=========*=========*=========*=========*
'== 功    能:连接服务
'== 参    数:intRemotePort As Integer 服务器 post(端口) maxWaitSecond
'== 返 回 值:"connect" 成功,建立连接成功,其它是没有连接成功
'== 性    质:自定义
'== 作    者:
'== 修改记事:sunnf 2006-12-05
'           加入最大等待时间参数
'========*=========*=========*=========*=========*=========*=========*=========*
Public Function ServerConnect(ByVal intRemotePort As Integer, ByVal strGangWeiID As String, ByVal strAddressID As String, ByVal strRenYuanID As String, ByVal strAccessIp As String, ByVal strUserID As String, ByVal strUserName As String, Optional maxWaitSecond As String = "20", Optional debugLog As String = "0")
    Dim strMessage As String
    Dim dBegin      As Date
On Error GoTo errHandle
    LINK_MAX_TIME = CLng(maxWaitSecond)
    frmVerify.mstrMessage = ""
    If frmVerify.wskClient.State <> sckClosed Then frmVerify.wskClient.Close
    frmVerify.wskClient.RemoteHost = "127.0.0.1"
    frmVerify.wskClient.RemotePort = intRemotePort
    frmVerify.TimerClient.Enabled = False
    frmVerify.mintTime = 0
    frmVerify.TimerClient.Enabled = True
    If debugLog = "1" Then
        MyResponse.Write "连接..=============." & "<br>"
        'MyResponse.End
    End If
    frmVerify.wskClient.Connect
    Do
        DoEvents '

        'Sleep (0)
    Loop Until frmVerify.wskClient.State = sckConnected Or frmVerify.mintTime > LINK_MAX_TIME
    If debugLog Then
        MyResponse.Write strMessage & "<br>"
    End If
'    frmVerify.mnewTime = Time  '//得系统时间
    frmVerify.TimerClient.Enabled = False
    If frmVerify.wskClient.State <> sckConnected Then  '连接失败
        'MousePointer = 0
        If debugLog = "1" Then
            MyResponse.Write "连接失败" & "<br>"
        End If
        If frmVerify.wskClient.State <> sckClosed Then frmVerify.wskClient.Close
        Exit Function
    End If
    If frmVerify.wskClient.State = sckConnected Then
        strMessage = strGangWeiID & "," & strAddressID & "," & strRenYuanID & "," & strAccessIp & "," & strUserID & "," & strUserName
        If debugLog = "1" Then
            MyResponse.Write strMessage & "<br>"
        End If

        frmVerify.wskClient.SendData strMessage '发送消息的内容
        If debugLog = "1" Then
            MyResponse.Write "发送信息到服务器,请等待..." & "<br>"
        End If

        frmVerify.TimerClient.Enabled = False
        frmVerify.mintTime = 0
        frmVerify.TimerClient.Enabled = True
    '    MyResponse.Write strMessage
        Do
            DoEvents '
    '    Loop Until frmVerify.wskClient.State = sckcompleted
        Loop Until Not frmVerify.mstrMessage = "" Or frmVerify.mintTime > LINK_MAX_TIME 'Or DateDiff("s", dBegin, Now()) > 120
        If debugLog = "1" Then
            MyResponse.Write "服务器运行计数:" & frmVerify.mintTime & "<br>"
        End If
        If debugLog = "1" Then
            MyResponse.Write "从服务器返回信息:" & frmVerify.mstrMessage & "<br>"
        End If

        If frmVerify.mstrMessage = "" Then
            ServerConnect = "error"
        Else
            ServerConnect = frmVerify.mstrMessage
        End If

        frmVerify.wskClient.Close
    End If
    frmVerify.TimerClient.Enabled = False
    Exit Function
errHandle:
    frmVerify.wskClient.Close
    frmVerify.TimerClient.Enabled = False
    ServerConnect = "error"
End Function

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunnf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值