读书人

发贴关于VB6定时器有关问题

发布时间: 2012-09-19 13:43:53 作者: rapoo

发贴求救关于VB6定时器问题,

VB code
Private Sub Form_Load()           '打开界面时    Menu = LED_MENU               '界面命名    tmrConnect.Enabled = True    lpPrev = SetWindowLongA(hwnd, GWL_WNDPROC, AddressOf WndProc)End SubPrivate Sub Form_UnLoad(Cancel As Integer)    '关闭界面时    tmrConnect.Enabled = False                '关闭查找USB定时器    tmrData.Enabled = False                   '关闭USB数据发收的定时器    Menu = MAIN_MENU                        If lpPrev <> 0 Then        lpPrev = SetWindowLongA(hwnd, GWL_WNDPROC, lpPrev)        lpPrev = 0    End IfEnd SubPrivate Sub tmrConnect_Timer()       '查检USB状态        Call ConnectRMC                  '查找USB设备    If FindTheHid = True Then        '找到了        tmrConnect.Enabled = False   '关闭查找         tmrData.Enabled = True      '数据收发    Else        tmrData.Enabled = False      '没找到,关闭数据发&收        tmrConnect.Enabled = True    '    End IfEnd SubPrivate Sub tmrData_Timer()             '数据数据收发     '主要是以定时的方式(暂定100ms发一次)向USB设备发送数据,然后读取数据     '代码若干,不贴了End SubPublic Function WndProc(ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long '消息拦截 当有消息时候会在这里出现    If msg = WM_DEVICECHANGE Then '此次是检查USB设备的连接状态        Select Case Menu            Case NET_MENU                DeviceNet.tmrUSB.Enabled = True            Case LED_MENU                      '在LED界面下,如果发生了改变时重新查找USB设备([color=#FF0000]此处设了一断点[/color])                LEDsignal.tmrConnect.Enabled = True            Case CH_MENU                SelectCH.tmrTelCom.Enabled = True            Case Else        End Select    End If    WndProc = CallWindowProcA(lpPrev, hwnd, msg, wParam, lParam) '返回消息给系统否则系统所有消息都被拦截 你的电脑几乎就是废了 关机都不行End Function



目的很简单,就是当打开"LED_MENU"界面时,自动检测USB设备(开启定时器tmrConnect),然后自动以定时的方式向USB设备发送数据,当界面关闭时,停止向USB设备发送数据(其实是停止定时器tmrData)。

现在出现的问题是:当我把界面关闭想停止向USB设备发送数据时,有时候会出现无法停止(强调:是有时候!!),调试发现关闭界面时,tmrConnect定时器被开启,重新查找了USB设备然后自动发送了数据,但是断点没有被响应,这让我很困惑我明明停掉了tmrConnect定时器,怎么会无端端开启了?……所以特来求助下,上面的程序应该很简单,都有注释,大伙给点耐心帮我看看。

[解决办法]
tmrConnect.Enabled=True:DoEvents '开启定时器tmrConnect
tmrData.Enabled=False:DoEvents '停止定时器tmrData
[解决办法]
不要使用定时器。程序启动时连接一次设备,以后使用 OnDeviceChange 消息尝试连接。

读书人网 >VB

热点推荐