使用多个执行线程
如果在单处理器的计算机上使用多线程,可能得不到所期望的结果。例如,考虑图 8.8 中的两个方法。图 8.8 多线程方法可能更慢些同时调用方法 A 和方法 B。在单线程的部件中,序列化这些请求,因此 B 要等到 A 完成才会开始。在多线程情况下,这两个活跃线程将争夺对处理器的控制权。这样,不但平均完成时间明显增加,而且线程之间的切换花费了更多的处理器时间。问题在于:执行方法 A 和方法 B 需要的时间差不多。在单处理器的机器上,只有执行长短混合的任务,多线程才能比较明显地改善性能。例如,如果方法 B 只需要三个时间片就能完成,则该系统的用户将认为方法 B 的响应性能有巨大的改善,而执行方法 A 所需的时间只增加了一点点。在下面的情况下,能够最好地显示出多线程的优点:绝大多数线程在大部分时间是被阻塞的(例如等待文件 I/O 操作),在这种情况下只有一两个线程在同时执行,因而能够迅速地执行。

解决方案 »

  1.   

    回复人: superzxf(superzxf) (  ) 信誉:100  2002-2-22 13:44:04  得分:0  
      
    用API函数CreateThreadVB5可能但现在VB6不行 。参见例子Coffee
    使用ActiveX 的线程池模拟多线程。
     
      

  2.   


    我看算了,不容易。VB6可以,直接CreateThread就可以了,不过注意一定要正常结束线程。同时注意线程同步,别冲突。
      

  3.   

    'In a form
    'Add a command button to the form
    Private Sub Command1_Click()
        'KPD-Team 1999
        'URL: http://www.allapi.net/
        'E-Mail: [email protected]
        'After you click this button, try to move the window
        'You will see that the AsyncThread-function was executed asynchronously
        Dim hThread As Long, hThreadID As Long
        hThread = CreateThread(ByVal 0&, ByVal 0&, AddressOf AsyncThread, ByVal 0&, ByVal 0&, hThreadID)
        CloseHandle hThread
    End Sub
    'In a module
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Declare Function CreateThread Lib "kernel32" (lpThreadAttributes As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadID As Long) As Long
    Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
    Public Sub AsyncThread()
        'Let this thread sleep for 10 seconds
        Sleep 10000
    End Sub