我对多线程不懂,谁能举出一个易懂的多线程例子。比如程序中利用VB的timer控件是否是多线程。

解决方案 »

  1.   

    多个timer不是多线程
    你搜一下吧
      

  2.   

    vb没有多线程,vc才有,用thread类
      

  3.   

    可以实现多线程,不过得调用API,给个类代码:
    Option Explicit
    Option Compare Text
    Option Base 0Private Type udtThread
        Handle As Long
        Enabled As Boolean
    End TypePrivate uThread As udtThreadPrivate Const CREATE_SUSPENDED As Long = &H4
    Private Const THREAD_BASE_PRIORITY_IDLE  As Long = -15
    Private Const THREAD_BASE_PRIORITY_LOWRT  As Long = 15
    Private Const THREAD_BASE_PRIORITY_MAX As Long = 2
    Private Const THREAD_BASE_PRIORITY_MIN As Long = -2
    Private Const THREAD_PRIORITY_HIGHEST  As Long = THREAD_BASE_PRIORITY_MAX
    Private Const THREAD_PRIORITY_LOWEST  As Long = THREAD_BASE_PRIORITY_MIN
    Private Const THREAD_PRIORITY_ABOVE_NORMAL As Long = (THREAD_PRIORITY_HIGHEST - 1)
    Private Const THREAD_PRIORITY_BELOW_NORMAL  As Long = (THREAD_PRIORITY_LOWEST + 1)
    Private Const THREAD_PRIORITY_IDLE  As Long = THREAD_BASE_PRIORITY_IDLE
    Private Const THREAD_PRIORITY_NORMAL As Long = 0
    Private Const THREAD_PRIORITY_TIME_CRITICAL As Long = THREAD_BASE_PRIORITY_LOWRTPrivate 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 SetThreadPriority Lib "kernel32" (ByVal hThread As Long, ByVal nPriority As Long) As Long
    Private Declare Function GetThreadPriority 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 LongPublic 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
        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.EnabledEnd 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 IfEnd Property
    Public Property Get Priority() As Long    On Error Resume Next
        Priority = GetThreadPriority(uThread.Handle)End PropertyPublic Property Let Priority(ByVal vNewValue As Long)    On Error Resume Next
        If vNewValue = -2 Then
            Call SetThreadPriority(uThread.Handle, THREAD_PRIORITY_LOWEST)
            
        ElseIf vNewValue = -1 Then
            Call SetThreadPriority(uThread.Handle, THREAD_PRIORITY_BELOW_NORMAL)
        ElseIf vNewValue = 0 Then
            Call SetThreadPriority(uThread.Handle, THREAD_PRIORITY_NORMAL)
        ElseIf vNewValue = 1 Then
            Call SetThreadPriority(uThread.Handle, THREAD_PRIORITY_ABOVE_NORMAL)
        ElseIf vNewValue = 2 Then
            Call SetThreadPriority(uThread.Handle, THREAD_PRIORITY_HIGHEST)
        End IfEnd PropertyPrivate Sub Class_Terminate()    On Error Resume Next
    '    Pause
        Call TerminateThread(uThread.Handle, 0)End SubPrivate Sub Pause()
        While True
            DoEvents
        Wend
    End Sub
    调用方法如下:    dim  mclsNewThread Is clsThread
        Set mclsNewThread = New clsThread
        With mclsNewThread
            .Initialize AddressOf mdlThread.StartTransfer
            .Enabled = True
        End With
      

  4.   

    更正:
    调用方法如下:     dim  mclsNewThread As clsThread
        Set mclsNewThread = New clsThread
        With mclsNewThread
            .Initialize AddressOf mdlThread.StartTransfer
            .Enabled = True
        End With
    其中StartTransfer为要享受该线程的方法。