Johnhall Johnhall
关注数: 0 粉丝数: 2 发帖数: 395 关注贴吧数: 3
难道是VB对多线程的限制吗 我想用定时器做延时多线程 刚开始做一个类,里面包含设置定时器(SetTimer,KillTimer),但很快发现其中的问题.而我用Timer控件更是如此,Form1.frm如下,大家不妨看看:VERSION 5.00Begin VB.Form Form1 Caption = "Form1" ClientHeight = 3090 ClientLeft = 60 ClientTop = 450 ClientWidth = 4680 LinkTopic = "Form1" ScaleHeight = 3090 ScaleWidth = 4680 StartUpPosition = 3 '窗口缺省 Begin VB.CommandButton Command1 Caption = "Command1" Height = 495 Left = 1920 TabIndex = 0 Top = 600 Width = 1215 End Begin VB.Timer Tmr2 Enabled = 0 'False Interval = 1000 Left = 1200 Top = 240 End Begin VB.Timer Tmr1 Enabled = 0 'False Interval = 1000 Left = 3720 Top = 240 End Begin VB.Label Label2 Caption = "Label2" Height = 495 Left = 3120 TabIndex = 2 Top = 1320 Width = 1215 End Begin VB.Label Label1 Caption = "Label1" Height = 495 Left = 600 TabIndex = 1 Top = 1200 Width = 1215 EndEndAttribute VB_Name = "Form1"Attribute VB_GlobalNameSpace = FalseAttribute VB_Creatable = FalseAttribute VB_PredeclaredId = TrueAttribute VB_Exposed = FalsePrivate Sub Command1_Click() Tmr1.Enabled = Not Tmr1.Enabled Tmr1.Enabled = Not Tmr2.EnabledEnd SubPrivate Sub Tmr1_Timer() Dim i As Integer, j As Integer For i = 0 To 20 DoEvents For j = 0 To 10000 DoEvents Next Label1.Caption = Str(i) Next Tmr1.Enabled = FalseEnd SubPrivate Sub Tmr2_Timer() Dim i As Integer, j As Integer For i = 0 To 20 DoEvents For j = 0 To 10000 DoEvents Next Label2.Caption = Str(i) Next Tmr2.Enabled = FalseEnd Sub是不是两个label就前面一个动啊,我用SetTimer的时候也是这样
为什么没有设置成功? 我想用API SetWindowlong重新设置窗口函数地址,以此接受菜单的WM_SYSCOMMAND消息,但是VB一下就结束了.我调试的时候感觉是消息循环的时候错了Private Sub Form_Load() Dim hMenu As Long If App.PrevInstance = True Then Unload Me End If OldProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WndProc) hMenu = GetSystemMenu(Me.hwnd, 0) RemoveMenu hMenu, 6, MF_BYPOSITION AppendMenu hMenu, MF_BYCOMMAND Or MF_STRING, WM_USER + IDM_MYABOUT, "关于..."End Sub相应的WinProc函数(在Module中):Public Function WndProc(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Select Case wMsg Case "WM_SYSCOMMAND" Select Case wParam Case WM_USER + IDM_MYABOUT MsgBox "XXXXXXXXXXXXX 2005.12.30", vbInformation, "关于" WndProc = 0 Case Else WndProc = DefWindowProc(hwnd, wMsg, wParam, lParam) End Select Exit Function Case Else WndProc = CallWindowProc(OldProc, hwnd, wMsg, wParam, lParam) End SelectEnd Function我在没设置窗口函数地址之前正常,添加和删除的系统菜单是可以看得见的.几个常数如下:Public Const GWL_WNDPROC = (-4)Public Const WM_USER = &H400Public Const WM_SYSCOMMAND = &H112Public Const WM_NCLBUTTONDBLCLK = &HA3Public Const WM_NCLBUTTONDOWN = &HA1Public Const HTCAPTION = 2Public Const MF_STRING = &H0&Public Const MF_BYCOMMAND = &H0&Public Const MF_BYPOSITION = &H400&Public Const SC_CLOSE = &HF060&Public Const IDM_MYABOUT = 1这些常数应该不会有错吧?
1 下一页