VB 多线程实例:

‘类模块:clsThreads


    Handle As Long

    Enabled As Boolean

    End Type

    Private uThread As udtThread

    Private Const CREATE_SUSPENDED As Long = &H4

    Private Declare Function CreateThread Lib "kernel32" (ByVal lpThreadAttributes As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadId As Long) As Long

    Private Declare Function ResumeThread Lib "kernel32" (ByVal hThread As Long) As Long

    Private Declare Function SuspendThread Lib "kernel32" (ByVal hThread As Long) As Long

    Private Declare Function TerminateThread Lib "kernel32" (ByVal hThread As Long, ByVal dwExitCode As Long) As Long

    Public Sub Initialize(ByVal lpfnBasFunc As Long)    '初始化线程

    Dim lStackSize As Long, lCreationFlags As Long, lpThreadId As Long, lNull As Long

    On Error Resume Next

    lNull = 0  '创建一个空指针

    lStackSize = 0    '0表示用exe的stack size

    lCreationFlags = CREATE_SUSPENDED    '表示初始化后先不激活,让别人来激活

    uThread.Handle = CreateThread(lNull, lStackSize, lpfnBasFunc, lNull, lCreationFlags, lpThreadId)

    If uThread.Handle = lNull Then MsgBox "Create thread failed!"

    End Sub
    Public Property Get Enabled() As Boolean

    On Error Resume Next

    Enabled = uThread.Enabled

    End Property

    Public Property Let Enabled(ByVal vNewvalue As Boolean)

    On Error Resume Next

    If vNewvalue And (Not uThread.Enabled) Then

    ResumeThread uThread.Handle     '激活线程

    uThread.Enabled = True

    ElseIf uThread.Enabled Then

    SuspendThread uThread.Handle

    uThread.Enabled = False

    End If

    End Property

    Private Sub Class_Terminate()    '终止线程

    On Error Resume Next

    Call TerminateThread(uThread.Handle, 0)

    End Sub
 

-------------------------------------------------------------------------

’Module1文件
    Private Declare Function GetTickCount Lib "kernel32" () As Long

    Public Sub FlickerTop()

    Static BgColor As Long

    Dim lTick As Long, lCounter As Long

    On Error Resume Next

    For lCounter = 0 To 60000

    BgColor = lCounter Mod 256

    Form1.Picture1.BackColor = RGB(BgColor, 0, 0)    '变化图片框的颜色

    lTick = GetTickCount

    While GetTickCount - lTick < 10    '延迟10个毫秒时间

    Wend

    Next

    End Sub

    Public Sub FlickerBottom()

    Static BgColor As Long

    Dim lTick As Long, lCounter As Long

    On Error Resume Next

    For lCounter = 0 To 60000

    BgColor = lCounter Mod 256

    Form1.Picture2.BackColor = RGB(0, BgColor, 0)

    lTick = GetTickCount

    While GetTickCount - lTick < 10

    Wend

    Next

    End Sub
--------------------------------------------------------------------

‘form1文件

    Option Explicit

    Public myThreadTop As New clsThreads, myThreadBottom As New clsThreads
    Private Sub Command1_Click()

    On Error Resume Next

    With myThreadTop

    .Initialize AddressOf FlickerTop

    .Enabled = True

    End With

    With myThreadBottom

    .Initialize AddressOf FlickerBottom

    .Enabled = True

    End With

    MsgBox "看看会有什么..."

    Set myThreadTop = Nothing

    Set myThreadBottom = Nothing

    End Sub

 

你可能感兴趣的:(VB)